Bir komut aramak ve bir komut cümlesi oluşturmak için kullanılacak bir sözlüğü içe aktarması gereken Qt kullanarak bir sınıf yazıyorum. Komutlar hiyerarşik bir şekilde düzenlenir ve karşılık gelen bir onaltılık anahtar ve değer tanımına sahiptir. Gösterim amacıyla, bu gibi görünebilir:Qt Tree Modeli, çeviriler için bir sözlük saklamak için yuvalanmış haritalara karşı
01 : Volume | - 01 : Step : 00=Down, 01=Up | - 02 : Set : ceil(255/100 * x) 02 : Power | - 01 : Power : 00=Off, 01=On | - 02 : Sleep : ...etc
bu sözlüğü yüklemek ve ardından "Ses/Set/50" için arama yapabilmek ve dönüş komutu cümle "01 02 80" veya bakmak istiyorum "01 02 80" yukarı ve "Volume/Set/50" yi döndür.
Gerçek uygulama biraz daha karmaşıktır ve ağaç yapısında farklı düzeylerde komutlara sahiptir ve tek bir cümlede farklı düzeylerdeki komutların herhangi bir sayısını ve kombinasyonunu içerebilir.
Düzenleme:
aşağıda Volodymyr tarafından sağlanan açıklama bir kavramı ben aşina değildi (Trie) tanıtır. Bu senaryo için en iyi uygulama olabilir, ama biraz daha araştırmam gerekiyor. Orijinal soruma hala yanıtla ilgileniyorum (Trie eklenmesiyle):
Bu uygulama için bu yöntemlerin her birinin kullanılmasının avantajları ve dezavantajları nelerdir?
- Qt Ağacı Modeli
- İçiçe Haritalar
- Trie
Orijinal soru:
(bağlam için) Benim bir Qt Ağacı Modeli, iç içe geçmiş haritalar veya diğer bazı sözlük saklamak için daha uygun olmalı? "Daha iyi" in öznel olabileceğinin farkındayım, ancak ticaret offs'larını bilmek isterim.
QTreeView'deki diğer verileri görüntülemek için bir Qt Ağacı Modeli oluşturuyorum, bu nedenle kod zaten var olacak ve kolayca kullanılabilir. Ağaç Modeli, farklı yapılara sahip sözlüklerin yüklenmesinde daha fazla esnekliğe izin verir mi? Bunu yapmanın daha iyi bir yolu var mı? ya da belki standart bir tasarım deseni?
Doğal diller için sözlükler söz konusu olduğunda, trie veri yapısı kullanılabilir (http://en.wikipedia.org/wiki/Trie#Dictionary_representation). Belki sizin için yararlı olacaktır. –
Denemeler araştırıldıktan sonra, bir kelime (kodlama) ile ilişkilendirilmiş hex anahtarlarını bulmak için yararlı olabilir, ancak bir hex cümlesini bir kelimeye (kod çözme) kolayca dönüştürebilme özelliği sağlamaz. Verilerin bir Qt Ağacı Modeli oluşturmak ve sonra kodlama için kodların konumunu dizine eklemek için bir Trie oluşturmak, sonra sadece kod çözme işlevini gerçekleştirmek için Qt Ağacı Modeli boyunca yinelemek uygun olur mu? – Chris
Böyle bir yaklaşımın verimliliği hakkında bir şey söyleyemem, ancak tekrar kullanılabilen bir kodunuz olduğu gerçeği beni denemeniz gerektiğini düşünmemi sağlıyor. Her neyse, bahsettiğiniz gibi, Trie durumunda geriye dönüşe izin vermek için TreeModel gibi bazı yardımcı yapılara ihtiyacınız olacak. Ayrıca, hex'e çeviri sırasında verilen argümanlar üzerinde bazı eylemler gerçekleştirmeniz gerektiği gibi görünüyor (ceil (255/100 * x) gibi). Bunu hesaba katmalısınız, çünkü bu durumda sadece doğrudan çeviri değildir. Onaltılık ve dize gösterimi arasında doğrudan uygunluk olması durumunda iki yollu karma kullanılabilir. –