"MQL5 Cookbook: Hızlı Veri Erişimi için İlişkisel Dizi veya Sözlük Uygulama" makalesi için tartışma - sayfa 4
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 birkaç nedeni olabilir. Büyük olasılıkla, ya tür uyumsuzluğu ya da işaretçilerin yanlış işlenmesi. Ayrıca, şablon yöntemlerle çalışmanın özelliklerini de göz ardı edemeyiz (orada da kendi nüansları vardır).
Genel olarak, hazır bir ticaret motoru kullanmak daha iyidir, çok fazla zaman ve sinir tasarrufu sağlarsınız: https://www.mql5.com/tr/articles/2166.
İyi günler! Bana tüm sözlük boyunca nasıl döngü yapacağımı, belirli bir koşula göre çiftleri nasıl kaldıracağımı söyleyebilir misiniz, yakalayamadığım bir şey. İşte böyle bir görevin bir örneği.
İyi günler! Bana tüm sözlük boyunca nasıl döngü yapacağımı, belirli bir koşula göre çiftleri nasıl kaldıracağımı söyleyebilir misiniz, yakalayamadığım bir şey. İşte böyle bir görev örneği.
Güzel soru. Şimdi sizin yönteminizi kullanarak silme işlemini kontrol ettim - doğru çalışmıyor. Bununla ilgileneceğim.
Güzel soru. Şimdi sizin yönteminizi kullanarak silme işlemini kontrol ettim - doğru çalışmıyor. Bakacağım.
Genel durumda doğru çalışmamalıdır.
İlişkisel bir diziden birden fazla silme işlemi gerçekleştirmenin doğru yolu, silinecek anahtarların bir dizisini toplamak ve ardından anahtara göre silmektir.
genel olarak doğru çalışması gerekmez.
İlişkisel bir diziden birden fazla silme işlemi gerçekleştirmenin doğru yolu, silinecek anahtarların bir dizisini toplamak ve ardından anahtara göre silmektir.
Bu anlaşılabilir bir durumdur, ancak yine de gereksiz bir iştir.
Güzel soru. Şimdi sizin yönteminizi kullanarak silme işlemini kontrol ettim - doğru çalışmıyor. Bakacağım.
Yanıtınız için teşekkürler!
genel olarak doğru çalışması gerekmez.
İlişkisel bir diziden birden fazla silme işlemi gerçekleştirmenin doğru yolu, silinecek anahtarların bir dizisini toplamak ve ardından anahtara göre silmektir.
Mesele şu ki, bu yöntem bile aniden garip bir hataya neden oluyor. Belli ki bir hata var. Bunu araştıracağım.
Şimdilik, size yeni bir sözlük oluşturmanızı ve silinmesine gerek olmayan değerleri eklemenizi tavsiye edebilirim. Sonra eskisini temizleyin. Bu %100 işe yarayacaktır.
İşte başlıyoruz:
1. Sözlük sürümünü bu yazıya eklenmiş olana güncelleyin.
2. Öğeleri bile silmek için bir test betiği çalıştırın.
Silme işlemi iki geçişte yapılmalıdır:
DeleteCurrentObject() yöntemi ile ilgili olarak:
Bu yöntem yalnızca ContainsKey() işlevi ile birlikte kullanılmalıdır. Public olarak kullanılabilir olmasının tek nedeni, bu durumda yöntem çağrısının işaretçinin yeniden konumlandırılmasında zaman kazandırmasıdır. Yani, tipik ve tek kullanım durumu 1. Bir anahtar olup olmadığını kontrol edin, 2. Varsa - bu yöntemle hızlı bir şekilde silin.
Bu anlaşılabilir bir şey ama yine de gereksiz bir kaporta işi.
Beklediğiniz gibi tek geçişli bir kaldırma işlemi yapmak teknik olarak mümkündür. Ancak bu karmaşık olacaktır. Bu yüzden henüz değil, sadece iki geçişte. Dağıtık bir veri yapısı olarak sözlük açısından bakıldığında, iki geçişli silme işlemi kanonik olarak daha doğru bir çözümdür. Sadece kullanıcı seviyesinde silme işlemi sıralı gibi görünür, gerçekte her şey farklıdır. Performans açısından, tek geçişli silme herhangi bir fayda sağlamayacaktır. Kolaylık açısından, evet, daha uygun olabilir.
Beklediğiniz gibi tek geçişli bir kaldırma işlemi yapmak teknik olarak mümkündür. Ancak bu karmaşık olacaktır. Bu yüzden henüz değil, sadece iki geçişte. Dağıtık bir veri yapısı olarak sözlük açısından bakıldığında, iki geçişli silme işlemi kanonik olarak daha doğrudur. Sadece kullanıcı seviyesinde silme işlemi sıralı gibi görünür, gerçekte her şey farklıdır. Performans açısından, tek geçişli silme herhangi bir fayda sağlamayacaktır. Kolaylık açısından, evet, daha uygun olabilir.
Teşekkürler.
Sanırım bir öğeyi silerken ve son öğeye ulaşmaya çalışırken bir hata buldum:
CDictionary.mqh dosyasında hata olacaktır:
'Dictionary.mqh' içindegeçersiz işaretçi erişimi (463,9)
Bunu doğrulayabilecek biri var mı? Nasıl düzeltileceği hakkında bir fikrin var mı?
İşaretçileri kontrol etme uygulamasında 500 && 501 satırında bir hata vardı.
Dahili CheckPointer() kullanılarak düzeltildi.