在集合中去除重复的值

4

我有一个 long 类型的集合 List<long>,名为 myIds。我正在向集合中添加 id,但是有些重复的 id 我想要删除。

我尝试使用 distinct() 方法来去除重复元素,但是没有效果。重新排序并再次应用 distinct() 也没有帮助。

有什么最好的方法可以在不编写自定义逻辑的情况下删除这些重复项吗?

我尝试了以下代码:

mydIds.OrderBy(x => x).Distinct().ToList();

你尝试过 mydIds = mydIds.OrderBy(x => x).Distinct().ToList() 吗? - Liel
你有更完整的代码示例吗?我可以通过LINQ的Distinct调用轻松删除集合中的重复long值,不需要OrderBy - Chris Sinclair
2
你需要将Distinct的结果重新分配给一个列表。 - Steve
@Steve 我认为就是这样。Codingjoe,你需要重新分配结果。它不会改变现有列表; 它会创建一个_新_列表。 - Chris Sinclair
我发现我的英语不是很好,我的帖子被轻微编辑过,但以更易懂的格式呈现 :) - codingjoe
3个回答

7

由于LINQ不会原地更改列表,因此您需要重新分配列表:

 mydIds = mydIds.Distinct().ToList();

啊,我感觉好蠢。其实我已经用了myIds.Distict().ToList()让它工作了;我在错误的集合变量上打了断点。 :/ - codingjoe

3

如果您使用的是3.5及以上版本:

var hs = new HashSet<int>(myIds);

HashSet将由列表填充。如果列表包含重复条目,则将忽略它们。不会抛出任何异常。


1
你不能将Distinct的结果重新赋值给一个List对象。
List<long> id = new List<long>() {20,50,34, 20, 21, 45, 50, 900, 34, 20};
id = id.Distinct().ToList();
id.ForEach(x => Console.WriteLine(x));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接