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

时间:2016-04-20 07:14:33

标签: c# asp.net

我的阵列:

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

7 个答案:

答案 0 :(得分:1)

尝试使用:

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));

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用LINQ执行此操作:

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

<强>输出

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

查看this demo

答案 3 :(得分:0)

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

{{1}}

答案 4 :(得分:0)

使用LINQ one-liner:

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

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

答案 5 :(得分:0)

您必须对两个阵列使用相同的循环(或使用其他答案中提出的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]));
}

答案 6 :(得分:0)

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]));
        }
    }
}