我的阵列:
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
答案 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]));
}
}
}