Dizeleri iki katına eşleyen bir sözlüğe sahibim. o, bulunmazsa eğer, 0 döndürür, 0 varsayılan değeri ekleyin branchProbability eklemek, yeni değer = 0 + branchProbability ayarlayın:Sözlüke etkili bir şekilde bir öğe eklemek ancak + = yerine = =
leaves[child.Value] += branchProbability;
Çünkü yerine yapmanın çöker:
Bu çizgi var bir KeyNotFoundException atar anahtar üzerinde bir şey yaparak başlar. Aklıma
tek şey:
if(!leaves.ContainsKey(child.Value))
leaves[child.Value] = branchProbability;
else
leaves[child.Value] += branchProbability;
Ama bunun için içeren ekstra arama gerektirir.
İçindekiler çeklerinden sakınırken bunu yapmanın daha verimli bir yolu var mıydı?
Anahtarı yaratacak olan 'TryGetValue' kullanabilir ve (0.0 varsayılan değeri vardır, bu durumda, bir çift, içinde) Sözlük-değeri için kullanılan tip varsayılan değerini geri dönebilirler. Bence kendi önerdiğiniz çözüm çok daha okunaklı ve anlaşılabilir. –
Alternatif olarak, [bu yanıt] (http://stackoverflow.com/a/2601501/717088), varsayılan değerler için uzantı yöntemleri oluşturulmasını önerir. Aynı soruya, bir "DefaultableDictionary" sınıfının bir uygulamasını yaratan [başka bir cevap] (http://stackoverflow.com/a/7061653/717088) de var. –