【问题标题】:Remove duplicate values in collection删除集合中的重复值
【发布时间】:2013-05-28 06:10:36
【问题描述】:

我有一个多头集合List<long>myIds。我正在用 id 填充集合。但是,我在要删除的集合中得到了一些重复项。

我尝试在集合上使用distinct(),但没有效果。重新排序并再次应用distinct() 也无济于事。

在不编写自定义逻辑的情况下删除这些重复项的最佳方法是什么?

我试过这个:

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

【问题讨论】:

  • 你试过mydIds = mydIds.OrderBy(x => x).Distinct().ToList()吗?
  • 你有更完整的代码示例吗?我通过 LINQ 的 Distinct 调用从集合中删除重复的 long 值没有问题;不需要OrderBy
  • 您需要将 Distinct 的结果重新评估为列表
  • @Steve 我想一定是这样。 Codingjoe,您需要重新分配结果。它不会更改现有列表;它会创建一个 new 列表。
  • 我发现我的英语不是那么敏锐,所以我的帖子被编辑成轻量级的,但格式更容易理解 :)

标签: c# collections lambda


【解决方案1】:

或者,如果您使用3.5 及更高版本:

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

哈希集将由列表填充。如果列表包含重复条目,它们将被忽略。不会抛出异常。

【讨论】:

    【解决方案2】:

    您不会将 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));
    

    【讨论】:

      【解决方案3】:

      您需要再次重新分配列表,因为 LINQ 不会更改列表:

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

      【讨论】:

      • 啊,我觉得自己好蠢。我实际上让它与 myIds.Distict().ToList();我在错误的集合变量上设置了断点。 ://
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 2017-10-25
      • 2019-02-17
      • 2015-11-24
      • 2019-08-08
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多