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

本文关键字:映射 字典 过滤 列表 | 更新日期: 2023-09-27 18:07:01

我正在尝试将两个列表映射到字典,但我得到错误"具有相同键的对象已经存在于…"

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);

谁知道怎么解决这个问题?谢谢。

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

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方法使用的问题。