初始化字典<字符串,字符串>自List
最简单的方法从扩展方法做到这一点,也许? :初始化字典<字符串,字符串>自List <string>
var MyDic = new Dictionary<string,string>{ "key1", "val1", "key2", "val2", ...};
凡字典的条目卷起含有字符串的简单列表键和值对,交替每隔字符串是关键和价值。
的交替是一个有点疼痛。 个人我只是做了普通的:
var dictionary = new Dictionary<string, string>();
for (int index = 0; index < list.Count; index += 2)
{
dictionary[list[index]] = list[index + 1];
}
你绝对可以与LINQ做到这一点,但它会更复杂 - 我喜欢使用LINQ时,它使事情变得更简单,但有时它只是不非常适合。
(很明显,你可以换行成一个扩展方法。)
注意,您可以使用dictionary.Add(list[index], list[index + 1])
抛出一个异常,如果有重复键 - 上面的代码将默默地使用最后发生的特别的关键。
+1,因为它敢于赞成老式的慢速方法而不喜欢可读的代码。 – DonBoitnott
'dictionary.Add(...)'而不是'dictionary [...] = ...'具有在键被复制时抛出适当异常的优点。 –
@TomBlodget:真。将添加一个注释。 –
您可以使用范围是列表的长度的一半,并ToDictionary
创建的,从列表项词典:
Dictionary<string, string> dictionary =
Enumerable.Range(0, list.Count/2)
.ToDictionary(i => list[i * 2], i => list[i * 2 + 1]);
应该是'list.Count'。没有'list.Length'。 –
@GrantWinney:当然。感谢您的发现。 – Guffa
如果你需要LINQ - 你可以先邮编名单本身:
var result = list.Where((item, id) => id % 2 == 0)
.Zip (list.Where((item, id) => id % 2 == 1),
(key, value) => new KeyValuePair<string,string>(key, value))
.ToDictionary(p => p.Key, p => p.Value);
LINQ和GroupBy
版本:
var dict = source.Select((s, i) => new { s, i })
.GroupBy(x => x.i/2)
.ToDictionary(g => g.First().s, g => g.Last().s);
你要什么时候发生的关键我s'null'或两个键是否相等或列表的长度是奇数?处理这些问题将形成代码。 –
在我的情况下,预计非空和独特的密钥。由于我不会尝试将这些键用作正常键,并且这只是一种简短的方法 –