我有一个包含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);
}
答案 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:
解决方案2:
答案 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();