【问题标题】:problem in using Distinct with Linq在 Linq 中使用 Distinct 的问题
【发布时间】:2010-05-03 13:29:18
【问题描述】:

您好,Linq 有问题。我有一个包含重复条目的双精度值数组。我只想从中提取不同的值。我有以下代码无法正常工作。

double[] dIds = GetIds(); //dIds has more than 10,000 items

var itemIdCollection = from id in dIds.Distinct()
                   select id;

Console.WriteLine(itemIdCollection.count().ToString());  //count is just 2 !!!!

你能给我一个解决方案吗?

谢谢,

【问题讨论】:

  • 您希望它返回什么?为什么?
  • 你看过dIds的内容吗?
  • 为什么count用小写C写?这是你的真实代码吗?
  • 您是否使用双打作为 ID?浮点数和等式不是好朋友...

标签: c# .net linq distinct


【解决方案1】:

首先,您不必进行那种怪异的选择。只需致电dIds.Distinct()。其次,我可以保证它适用于任何双打数组。你的双打与其他人的双打没有什么不同。

显然,如果 Distinct() 返回计数为 2 的可枚举(顺便说一句,Console.WriteLine(itemIdCollection.Count()) 就足够了),这是因为 GetIds() 返回一个仅包含两个不同双精度数的数组。

你的假设,它们是不正确的。

【讨论】:

    【解决方案2】:

    试试这个:

    List<double> x = new List<double>()
    {
        3, 4, 5, 6, 7, 7, 7, 8, 8
    };
    
    List<double> distinct = x.Distinct().ToList();
    
    distinct.ForEach(y => Console.WriteLine(y));
    Console.ReadKey();
    

    【讨论】:

    • ForEach 扩展不属于 .Net 标准库...你应该提供它(即使很容易找到或实现)
    • ForEach 是对作为 .NET 一部分的 Linq 提供的列表的扩展。
    • 对不起,我太不喜欢它了,以至于我忘记了它的存在。 :P
    • ForEach 不是列表的扩展,也不是 LINQ 的一部分。这是列表类型上非常普通的方法。
    • 是的,你是对的!那是我的错误,所有看起来像 Linq 查询的东西我倾向于在不知道更好的情况下调用 Linq 方法 =D
    【解决方案3】:

    幽灵调试尝试:

    您是否在 GetIds() 函数中生成新的随机 ID?如果是这样,请记住您应该在函数外部实例化 Random...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多