如何在没有循环的情况下将键数组和值数组连接到字典中?
How do I join an array of keys with an array of values to a dictionary without a loop?
我有一组键和值,我想从中创建字典:
var keys = new string[] { "Key1", "Key2" };
var values = new string[] { "Bob", "Tim" };
命令式的方式是这样的:
var dictionary = new Dictionary<string, string>();
for(int i = 0; i < keys.Length; i++) {
dictionary.Add(keys[i], values[i]);
}
如果没有循环,我将如何做到这一点?可能与 Linq 一起?我看过 Array.Join,但无法弄清楚如何让它在这种情况下对我有用。
您需要 Enumerable.Zip
(to combine keys and values into single sequence) and Enumerable.ToDictionary
(将该序列转换为字典)。
样本:
var result = keys.Zip(values, (k,v) => new {k,v})
.ToDictionary(p => p.k, p => p.v);
有一个很棒的 ToDictionary
扩展方法。
Range
方法只是循环索引,它假定两个数组都不为空且长度相同。
var dictionary = Enumerable.Range(0, keys.Length)
.ToDictionary(i => keys[i], i => values[i])
反正是2个循环:
var dic = keys.Select((k, i) => new { Key = key, Value = values[i] })
.ToDictionary(p => p.Key, p => p.Value);
假设 keys
和 values
是对称的。
我有一组键和值,我想从中创建字典:
var keys = new string[] { "Key1", "Key2" };
var values = new string[] { "Bob", "Tim" };
命令式的方式是这样的:
var dictionary = new Dictionary<string, string>();
for(int i = 0; i < keys.Length; i++) {
dictionary.Add(keys[i], values[i]);
}
如果没有循环,我将如何做到这一点?可能与 Linq 一起?我看过 Array.Join,但无法弄清楚如何让它在这种情况下对我有用。
您需要 Enumerable.Zip
(to combine keys and values into single sequence) and Enumerable.ToDictionary
(将该序列转换为字典)。
样本:
var result = keys.Zip(values, (k,v) => new {k,v})
.ToDictionary(p => p.k, p => p.v);
有一个很棒的 ToDictionary
扩展方法。
Range
方法只是循环索引,它假定两个数组都不为空且长度相同。
var dictionary = Enumerable.Range(0, keys.Length)
.ToDictionary(i => keys[i], i => values[i])
反正是2个循环:
var dic = keys.Select((k, i) => new { Key = key, Value = values[i] })
.ToDictionary(p => p.Key, p => p.Value);
假设 keys
和 values
是对称的。