私は文字列を倍精度にマップする辞書を持っている。それは、 が見つからない場合は、0を返し、0のデフォルト値を追加します。branchProbabilityに追加し、新しい値= 0 + branchProbability設定:辞書に項目を効率的に追加するが、代わりに+ = =
leaves[child.Value] += branchProbability;
それが原因で代わりに行うのクラッシュ:
私はこのラインを持っていますKeyNotFoundExceptionをスローするキーを取得することから始めます。私は考えることができる
唯一のものは、次のとおりです。
if(!leaves.ContainsKey(child.Value))
leaves[child.Value] = branchProbability;
else
leaves[child.Value] += branchProbability;
しかし、これは含まれていため、余分な検索が必要。
Containsチェックを回避しながらこれを行うより効率的な方法がありますか?
あなたは、キーを作成して、(0.0のデフォルト値を持っているこの場合は、二重、)あなたの辞書値のために使用されるタイプのデフォルト値を返します 'TryGetValue'を使用することができます。私の意見では、あなた自身の提案された解決策ははるかに読みやすく分かりやすいです。 –
また、[この回答](http://stackoverflow.com/a/2601501/717088)では、デフォルト値の拡張メソッドの作成を提案しています。同じ質問に[別の回答](http://stackoverflow.com/a/7061653/717088)があり、これは 'DefaultableDictionary'クラスの実装を作成しました。 –