キーがタプルである辞書をチェックし、チェックしていた値を変数に割り当てる簡単な方法はありますか?私は、次のコードが動作しているが、それは退屈なようです。簡略化したいキーがタプルのときに辞書へのアクセス
int hitCount = dict.ContainsKey(new Tuple<string, string>(tr, "H"))
? dict[new Tuple<string, string>(tr, "H")]
: 0;
キーがタプルである辞書をチェックし、チェックしていた値を変数に割り当てる簡単な方法はありますか?私は、次のコードが動作しているが、それは退屈なようです。簡略化したいキーがタプルのときに辞書へのアクセス
int hitCount = dict.ContainsKey(new Tuple<string, string>(tr, "H"))
? dict[new Tuple<string, string>(tr, "H")]
: 0;
int hitCount;
var key = new Tuple<string, string>(tr, "H");
dict.TryGetValue(key, out hitCount);
C#7以降で:
var key = new Tuple<string, string>(tr, "H");
dict.TryGetValue(key, out int hitCount);
差がhitCount
の宣言は、それがout
パラメータとして使われている場所に移動されることです。
キーを別々の変数に定義する必要はありませんが、これらのシナリオではキーが存在しない場合は追加することになります。
使用Dictionary<K,V>.TryGetValue
:
int hitCount;
dict.TryGetValue(new Tuple<string, string>(tr, "H"), out hitCount);
値が見つからない場合は、hitCount
が0
あるint
のデフォルト値に割り当てられます。
使用Tuple.Create
は、メソッドの引数の型とジェネリック型パラメータを推測コンパイラを聞かせする:
int hitCount;
if (!dict.TryGetValue(Tuple.Create(tr, "H"), out hitCount)) {
hitCount = 0;
}
注:をゼロにhitCount
を設定する必要はありません。このコードは、デフォルトとは異なる番号を使用する場合に備えて、欠落しているキーを処理する方法を示しています。
あなたは本当にそれを必要としません。もし0の割り当てがあれば、それはまさにTryGetValueでしょう。 – Adrian
@adjan私はOPの別のデフォルト値を使用したい場合のためにステートメント構造を維持しました。 – dasblinkenlight