有效删除大型列表中的重复项?

时间:2014-11-20 07:09:11

标签: c# linq list

我有一个包含id和值的列表,我需要删除id重复。我正在寻找一种在LINQ中更有效的方式,而不是我的循环和if条件。感谢您的帮助和建议。

var list = new List<Tuple<int, double>>();

Current values:
1, 3.6
1, 3.8
2, 5.6
3, 8.1

Wished values:
1, 3.6
2, 5.6
3, 8.1


for (int i = 0; i < list.Count - 1; i++)
{
    if (list[i].Item1 == list[i + 1].Item1)
        list.RemoveAt(i+ 1);
}

4 个答案:

答案 0 :(得分:3)

如果Id和Values与另一个相同。它将从列表中删除该项目。

distinctList = list.Distinct().ToList();

如果您可以将 元组 转换为 字典

试试这个:如果只复制Id,请从列表中删除该项目。它不会考虑重复值。

var distinctDictionary = list.GroupBy(id => id.Item1)
                         .Select(group => group.First())
                         .ToDictionary(id => id.Item1, val => val.Item2);

查看屏幕截图:

解决方案1:

Solution One

解决方案2:

Solution Two

答案 1 :(得分:2)

为什么你是带有元组的List?根据所请求的功能,我将使用Dictionary,因此您不会有重复项。

答案 2 :(得分:2)

鉴于您认为LINQ通常更具可读性/可维护性并且通常对效率是公平的,我提出以下使用LINQ的解决方案,并且(恕我直言与目前为止提供的其他方案相比)在执行方面也更有效 - < / p>

list = list.Where((entry, i) => i == 0 || entry.Item1 != list[i - 1].Item1).ToList();

答案 3 :(得分:0)

DistinctByKey = list.Select(x =&gt; x.Keys).Distinct();

DistinctByValue = DistinctByKey.Select(x =&gt; x.Values).Distinct();