我有一组键和值,我想从中创建一个字典:
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,但在这种情况下无法弄清楚如何让它适用于我。
答案 0 :(得分:6)
您需要Enumerable.Zip
(将键和值组合成单个序列)和Enumerable.ToDictionary
(将该序列转换为字典)。
样品:
var result = keys.Zip(values, (k,v) => new {k,v})
.ToDictionary(p => p.k, p => p.v);
答案 1 :(得分:6)
有一个很棒的ToDictionary
扩展方法。
Range
方法只是循环遍历索引,并假设两个数组都不是null且长度相同。
var dictionary = Enumerable.Range(0, keys.Length)
.ToDictionary(i => keys[i], i => values[i])
答案 2 :(得分:0)
无论如何它都是2个循环:
var dic = keys.Select((k, i) => new { Key = key, Value = values[i] })
.ToDictionary(p => p.Key, p => p.Value);
假设keys
和values
是对称的。