Diyelim ki int, datetime ve double alanları olan bir yapı var ve bu yapıdan oluşan verilerle dolu bir dizi var. Dizinin her hücresinde yapının alanları doldurulur.
Bu dizi, bu alanlardan herhangi birine göre nasıl sıralanır?
Bir double[][2] dizisi oluşturun, onu { fieldvalue, arrayindex } olarak doldurun. Normal ArraySort ile sıralayın (ilk değişikliğe göre). O zaman dizideki yapıları zaten indekslere göre düzenlersiniz. Bunun MQL'deki tüm olası yolların en hızlısı olduğuna inanıyorum.
Alexey Navoykov : Bir double[][2] dizisi oluşturun, onu { fieldvalue, arrayindex } olarak doldurun. Normal ArraySort'a göre sıralayın (ilk değişikliğe göre). O zaman dizideki yapıları zaten indekslere göre düzenlersiniz.
Ben sadece bu yöntemi atlamak istedim. Başka yollar olabileceğini düşündüm.
Diyelim ki int, datetime ve double alanları olan bir yapı var ve bu yapıdan oluşan verilerle dolu bir dizi var. Dizinin her hücresinde yapı alanları doldurulur.
Bu dizi, bu alanlardan herhangi birine göre nasıl sıralanır?
Merhaba, karmaşık bir veri türü dizisini sıralayabilen bir tür evrensel sıralama işlevine ihtiyacınız varsa, bu prensipte imkansızdır.
Önceden bilinen bir türde çok faktörlü sıralama olanağına ihtiyacınız varsa, bu, sınıflar aracılığıyla standart yollarla yapılabilir ve özellikle CArrayObj bunun için tasarlanmıştır.
C# gibi yetişkin dillerinde bile karmaşık nesnelerin sıralanması özel IComparer aracılığıyla çözüldüğünü ekleyeceğim. Onlar. Yine de sıralama kriterini kendiniz yazmanız gerekiyor.
İkinci yöntem benzerdir, yalnızca operatör tamamen haricidir ve sıralamaya iletilir. Biraz daha karmaşık ama çok daha çok yönlü.
Gerekirse atabilirim, ancak daha sonra.
Sıralama sadece bir kod tabanının kopyala-yapıştır işlemidir, daha hızlı ihtiyacınız varsa, kendi akıllı olanı yazmanız gerekir, ancak bir kez yazın ve artık endişelenmeyin.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Bunun gibi?
https://www.mql5.com/ru/code/9336
Soru, bir dizi yapı ve yapı alanlarına göre sıralama hakkındaydı.
Herhangi bir (string olmayan) verilen yapı alanına göre bir dizi yapıyı ucuz bir şekilde sıralayan var mı?
Diyelim ki int, datetime ve double alanları olan bir yapı var ve bu yapıdan oluşan verilerle dolu bir dizi var. Dizinin her hücresinde yapının alanları doldurulur.
Bu dizi, bu alanlardan herhangi birine göre nasıl sıralanır?
Bir double[][2] dizisi oluşturun, onu { fieldvalue, arrayindex } olarak doldurun. Normal ArraySort'a göre sıralayın (ilk değişikliğe göre). O zaman dizideki yapıları zaten indekslere göre düzenlersiniz.
Ben sadece bu yöntemi atlamak istedim. Başka yollar olabileceğini düşündüm.
Neden bunu atlasın? Daha hızlı bir şey bulamazsınız, çünkü sıralama, yerel bir işlev tarafından gerçekleştirilir.
Neden bunu atlasın? Daha hızlı bir şey bulamazsınız, çünkü sıralama, yerel bir işlev tarafından gerçekleştirilir.
Herhangi bir (string olmayan) verilen yapı alanına göre bir dizi yapıyı ucuz bir şekilde sıralayan var mı?
Diyelim ki int, datetime ve double alanları olan bir yapı var ve bu yapıdan oluşan verilerle dolu bir dizi var. Dizinin her hücresinde yapı alanları doldurulur.
Bu dizi, bu alanlardan herhangi birine göre nasıl sıralanır?
Merhaba, karmaşık bir veri türü dizisini sıralayabilen bir tür evrensel sıralama işlevine ihtiyacınız varsa, bu prensipte imkansızdır.
Önceden bilinen bir türde çok faktörlü sıralama olanağına ihtiyacınız varsa, bu, sınıflar aracılığıyla standart yollarla yapılabilir ve özellikle CArrayObj bunun için tasarlanmıştır.
C# gibi yetişkin dillerinde bile karmaşık nesnelerin sıralanması özel IComparer aracılığıyla çözüldüğünü ekleyeceğim. Onlar. Yine de sıralama kriterini kendiniz yazmanız gerekiyor.
Ben sadece bu yöntemi atlamak istedim. Başka yollar olabileceğini düşündüm.
Evet iki tane var.
Bir numaralı yöntem - operatörün belirtilmesi <
İkinci yöntem, işlevlerdir.
Bir numaralı yöntem:
İkinci yöntem benzerdir, yalnızca operatör tamamen haricidir ve sıralamaya iletilir. Biraz daha karmaşık ama çok daha çok yönlü.
Gerekirse atabilirim, ancak daha sonra.
Sıralama sadece bir kod tabanının kopyala-yapıştır işlemidir, daha hızlı ihtiyacınız varsa, kendi akıllı olanı yazmanız gerekir, ancak bir kez yazın ve artık endişelenmeyin.İkinci yöntem benzerdir, yalnızca operatör tamamen haricidir ve sıralamaya iletilir. Biraz daha karmaşık ama çok daha çok yönlü.
Yani - işlev işaretçilerini kullanmanız gerekir