这似乎是一件奇怪的事情,但忽略这一点,有没有一种很好的简明的方法将List<string>
转换为Dictionary<string, string>
,其中字典中的每个键值对就是列表中的每个字符串。即
List = string1, string2, string3
Dictionary = string1/string1, string2/string2, string3/string3
我已经做了大量的搜索,仅在Stackoverflow上就有几十个相反方向的例子,但不是这样的。
这样做的原因是我有两个第三部分组件,并且更改它们不是我所能控制的。一个返回一个电子邮件地址列表作为List<string>
,另一个发送电子邮件,其中的To参数是一个Dictionary<string, string>
。字典的关键字是电子邮件地址,值是他们的真实姓名。然而,我不知道真实姓名,但如果你也将真实姓名设置为电子邮件地址,它仍然有效。因此,我想要将列表转换为Dictionary<string, string>
。有很多方法可以做到这一点。列表上的foreach
循环,它将一个kvp添加到字典中。但我喜欢简洁的代码,并想知道是否有单行解决方案。
发布于 2012-07-20 22:12:07
使用以下命令:
var dict = list.ToDictionary(x => x);
有关详细信息,请参阅MSDN。
正如Pranay在评论中指出的那样,如果一个项目在列表中多次出现,这将失败。
根据您的特定需求,您可以使用var dict = list.Distinct().ToDictionary(x => x);
获取不同条目的字典,也可以使用ToLookup
:
var dict = list.ToLookup(x => x);
这将返回一个本质上与IDictionary<string, IEnumerable<string>>
相同的ILookup<string, string>
,因此您将拥有一个包含每个string实例的不同键的列表。
发布于 2012-07-20 22:13:04
通过使用ToDictionary
var dictionary = list.ToDictionary(s => s);
如果可以重复任何字符串,可以先在列表上调用Distinct
(以删除重复项),或者使用允许每个键有多个值的ToLookup
。
发布于 2012-07-20 22:20:07
您可以使用:
var dictionary = myList.ToDictionary(x => x);
https://stackoverflow.com/questions/11581101
复制相似问题