2013-01-22 12 views
6

同じサイズの2つの文字列リストがあります。 私は辞書を作成したい、キーはlistAからです。値はlistBです。ToDictionaryを使用して辞書を作成する

速い方法は何ですか?

私は、コードを使用:私はこの方法が好きではない

 List<string> ListA; 
     List<string> ListB; 
     Dictionary<string,string> dict = new Dictionary<string,string>(); 
     for(int i=0;i<ListA.Count;i++) 
     { 
       dict[key] = listA[i]; 
       dict[value]= listB[i]; 
     } 

、私はToDictionaryメソッドを使用できますか?

答えて

14

.NET 4.0以降では、このようなLINQのZip方法、使用してそれを行うことができます。

var res = ListA.Zip(ListB, (a,b) => new {a, b}) 
       .ToDictionary(p=>p.a, p=>p.b); 

[郵便番号]メソッドを同じインデックスを持つ要素を持つ最初のシーケンスの各要素をマージ第2の順序で。

+0

ご注文は確実ですか? –

+0

これは素晴らしいことです! – Spontifixus

+0

あなたはその見積もりを追加します –

4

このインデックスにBを取得するために使用できるインデックスを持つ匿名タイプを作成できます。値が場合ListBnullであろうこと

Dictionary<string, string> dict = ListA 
    .Select((a, i) => new { A = a, Index = i }) 
    .ToDictionary(x => x.A, x => ListB.ElementAtOrDefault(x.Index)); 

ListAよりも小さくなっています。

2

あなたのバージョンが読みやすく、他のLINQソリューション(特にビッグリストを使って作業している場合)よりもデバッグしやすく簡単ですので、気にしません。

2

私はあなたのバージョンを変更しません。

次のコードは、あなたのケースでは、IMHOのLINQより読みやすくなります。

var ListA = new List<string>(); 
var ListB = new List<string>(); 
var dict = new Dictionary<string, string>(); 

for (int i = 0; i < ListA.Count; i++) 
{ 
    dict.Add(ListA[i], ListB[i]); 
} 
+0

+1これは最も簡単なソリューションで、デバッグと読み込みが容易です –

関連する問題