从两个数组中分配KeyValuePair的正确方法

本文关键字:KeyValuePair 分配 方法 数组 两个 | 更新日期: 2024-10-20 21:14:20

我的数组:

string[] name = "a,b,c,d".Split(',');//key
string[] path = "w,x,y,z".Split(',');//value
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();

我尝试分配这样的值。

foreach (string s in name)
{
    foreach (string sp in path)
    {
        list.Add(new KeyValuePair<string, string>(s, sp));
    }
}

但我的逻辑是失败的。从两个数组中分配KeyValue对的正确方法是什么?

预期结果。

a-w
b-x
c-y
d-z

从两个数组中分配KeyValuePair的正确方法

尝试使用:

string[] names = "a,b,c,d".Split(','); //key
string[] paths = "w,x,y,z".Split(','); //value
var namesAndPaths = names.Zip(paths, (name, path) => new KeyValuePair<string,string>(name, path));

您必须对两个数组使用相同的循环(或使用其他答案中提出的LINQ解决方案):

string[] name = "a,b,c,d".Split(','); // Key
string[] path = "w,x,y,z".Split(','); // Value
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
for (int i = 0; i < name.Length, i++)
{
    if (i == path.Length) // In case both arrays are not the same length
    {
        break;
    }
    list.Add(new KeyValuePair<string, string>(name[i], path[i]));
}

如果确定两个array的长度相等,则可以执行:

for (var i = 0; i < name.Length; ++i) {
    list.Add(new KeyValuePair<string, string>(name[i], path[i]));
}

假设两个数组的长度相同,则可以这样做-

for(int i=0; i<name.Length; i++)
{
    list.Add(new KeyValuePair<string, string>(name[i], path[i]));
}
string[] name = "a,b,c,d".Split(','); //key
string[] path = "w,x,y,z".Split(','); //value
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
for (int i = 0; i < name.Length; i++)
{
    for (int j = 0; j < path.Length; j++)
    {
        if (i == j)
        {
            list.Add(new KeyValuePair<string, string>(name[i], path[j]));
        }
    }
}

您可以使用LINQ:来完成此操作

var mergedKeyValues = name.Select((n,i) => new KeyValuePair<string,string>(n,path[i]))
                             .ToList();

输出

   [a, w]
   ,
   [b, x]
   ,
   [c, y]
   ,
   [d, z]

看看这个演示。

使用LINQ单行:

var d = name.Select((n, idx) => new { Name = n, Index = idx })
            .ToDictionary(k => k.Name, v => path[v.Index]);

这里的关键是使用Select方法中的索引来确定要在其他数组中使用的索引。