Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 47
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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