使用c#将列表映射到字典时如何过滤值

时间:2013-04-01 21:40:56

标签: c# list dictionary todictionary

我正在尝试将两个列表映射到字典,但我得到错误“一个具有相同密钥的对象已存在于...”

List<string> columnValue = new List<string>(); 
List<string> xpathValue = new List<string>();

var dic = columnValue.Zip(xpathValue, (k, v) => new { k, v}).Distinct().ToDictionary(x => x.k, x => x.v);

有谁知道如何解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:0)

Distinct查看整个对象,因此所有属性必须相同才能将对象视为相等。如果Zip之后的列表包含两个具有相同k但差异v的元素,则ToDictionary会出错。

尝试一下:

var dic = columnValue.Zip(xpathValue, (k, v) => new { k, v})
                     .GroupBy(x => x.k)
                     .ToDictionary(g => g.Key, g => g.First().v);

它按k对元素进行分组,并添加到每个组中第一个元素的字典v。这解决了Distinct方法使用的问题。