6

同じサイズの文字列リストが 2 つあります。辞書を作成したいのですが、キーは from listA、値は fromlistBです。

速い方法は何ですか?

私はコードを使用しました:

        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メソッドを使用できますか?

4

4 に答える 4

14

.NET 4.0 以降では、次のZipように LINQ のメソッドを使用して実行できます。

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

[Zip] メソッドは、最初のシーケンスの各要素を、2 番目のシーケンスの同じインデックスを持つ要素とマージします。

于 2013-01-22T14:00:00.360 に答える
4

このインデックスを取得するために使用できるインデックスを使用して、匿名型を作成できますB

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

が より小さいnull場合の値になることに注意してください。ListBListA

于 2013-01-22T13:59:23.187 に答える
2

あなたのバージョンは読みやすく、デバッグが簡単で、他のどのLINQソリューションよりも高速であるため(特に大きなリストを扱っている場合)、私は気にしません(可能であれば)。

于 2013-01-22T14:03:57.367 に答える
2

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

次のコードは、あなたの場合、私見では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]);
}
于 2013-01-22T14:05:03.677 に答える