2013-04-01 1 views
0

Я пытаюсь сопоставить два списка в словаре, но я получаю ERR «объект с тем же ключом уже существует в ...»Как отфильтровать значения, когда список отображения в словарь с помощью C#

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

Кто-нибудь знает, как это решить ... Спасибо.

ответ

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.