3

辞書のキーと値を同じ順序で取得するエレガントな方法はありますか? dict.Values.ToArray()and dict.Keys.ToArray()(またはdict.Select(obj => obj.Key)and dict.Select(obj => obj.Value)) を使用すると、それらが同じ順序にならないことが心配です。

これを実行する簡単な方法は次のとおりです。

foreach (var keyAndVal in dict)
{
    keyList.Add(keyAndVal.Key);
    valueList.Add(keyAndVal.Value);
}
var keyArray = keyList.ToArray();
var valueArray = valueList.ToArray();

私には、これが LINQ の目的のようなものだと感じています (ただし、2 つの異なる呼び出しで辞書の反復順序が同じであるとは限りません)。これらを同じ順序で取得するエレガントな (つまり、LINQ などの) 方法はありますか?

どうもありがとうございました。

4

1 に答える 1

3

vcsjones が 指摘しているように、標準の辞書の場合、KeysValuesコレクションは同じ順序になります。ただし、常に同じ順序になるキー配列と値配列を作成するメソッドが必要な場合は、 の実装に対してIDictionary<TKey, TValue>、次のようにすることができます。

var keyArray = new TKey[dict.Count];
var valueArray = new TValue[dict.Count];
var i = 0;
foreach (var keyAndVal in dict)
{
    keyArray[i] = keyAndVal.Key;
    valueArray[i] = keyAndVal.Value;
    i++;
}
于 2013-10-23T15:04:17.390 に答える