2017-10-19 7 views
0

値:キーの配列で辞書を初期化し、次のように私は、キーと値の配列で辞書を初期化したい

int[] keys = {1, 2, 3}; 
string[] values = {"a", "b", "c"}; 
Dictionary<int, string> dict = new Dictionary<int, string>(keys, values); 

を反復することなく、それを行うには 速い 方法はあります

for (int i = 0; i < keys.Length; ++i) 
{ 
    dict.Add(keys[i], values[i]); 
} 

EDIT:誰かがthis 1の重複としてこの質問をマークし、彼らは関係のない、その質問は、辞書にキー値のコレクションを回すことについて質問しないように、しかし、リストのように配列、オブジェクトの各オブジェクト保持キーと値のリストを辞書に追加します。

+4

下複雑に結合した* O(n)の*、であるので、とにかく反復する必要があります。 –

答えて

4

使用Zip()

int[] keys = { 1, 2, 3 }; 
string[] values = { "a", "b", "c" }; 

var dict = keys.Zip(values, (num, str) => new { num = num, str = str }) 
      .ToDictionary(ns => ns.num, ns => ns.str); 

それは速くなりません、おそらく十分では関係していないが、すべてのために私は、それが実際には少し遅いかもしれません知っています。

forループの利点の1つは、values.Length < keys.Lengthの場合、Zip()は例外をスローしません。


the C#7 value tuple feature is usable without any nonsenseたら、あなたはいくつかの文字を保存することができます:

var dict = keys.Zip(values, (num, str) => (num: num, str: str)) 
      .ToDictionary(ns => ns.num, ns => ns.str); 
関連する問題