如何在字典中统一两个数组?

sel*_*ion 21 c#

如果你有两个阵列string[] a,int[] b你如何能够Dictionary<string,int>最有效地获得最佳代码?假设它们包含相同数量的元素.

例如,这是最好的方法吗?

Dictionary<string,int> vals = new Dictionary<string,int>();
for(int i = 0; i < size; i++)
{
    vals.Add(a[i],b[i]);
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ram 32

如果您的目标是匹配序列中的位置,则可以使用Enumerable.Zip.

int[] myInts = { 1, 2 };
string[] myStrings = { "foo", "bar"};

var dictionary = myStrings.Zip(myInts, (s, i) => new { s, i })
                          .ToDictionary(item => item.s, item => item.i);
Run Code Online (Sandbox Code Playgroud)

因为你正在使用数组,所以把它写成"longhand"并不是那么久.但是,您希望事先验证数组的长度是否相等.

var dictionary = new Dictionary<string, int>();

for (int index = 0; index < myInts.Length; index++)
{
    dictionary.Add(myStrings[index], myInts[index]);
}
Run Code Online (Sandbox Code Playgroud)

通常,Linq可以产生更具表现力,更易于理解的代码.在这种情况下,可以说相反的是正确的.


Chr*_*man 12

如果这是.Net 4,那么您可以执行以下操作:

var result = a.Zip(b, (first, second) => new {first, second})
    .ToDictionary(val => val.first, val => val.second);
Run Code Online (Sandbox Code Playgroud)

没有Zip,你也可以这样做:

var result = Enumerable.Range(0, a.Length).ToDictionary(i => a[i], i => b[i]);
Run Code Online (Sandbox Code Playgroud)

  • 我可能是少数,但我实际上更喜欢Enumerable.Range解决方案.更容易上眼睛. (4认同)