努力理解c#中的LINQ

本文关键字:中的 LINQ 努力 | 更新日期: 2023-09-27 18:06:39

下面是我在c#中工作的代码。我知道它在寻找我的数据集的模式,但我困惑的是GroupBy(value => value)=>到底做了什么,因为我可以改变任何值,它仍然有效。我希望能够使用LINQ,我只需要对这些参数有更深入的了解。

static double Mode()
{
  double mode = valueArray.GroupBy(value => value)
        .OrderByDescending(value => value.Count())
        .First()
        .Key;
  return mode;
}

努力理解c#中的LINQ

让我们来解剖你的Linq Query的不同部分。这里,每个调用的结果/输出充当下一个调用的输入,以处理数据

  1. valueArray.GroupBy(value => value)

GroupBy在这里与Sql中的用法相同,它导致的结果格式为IEnumerable<IGrouping<Key,Value>>, lambda =>是一个glue,它提供了集合valueArray中的每个元素进行处理。唯一奇怪的是,你把整个对象作为Key,所以在这种情况下,结果将是相同的object as key and value。在这种情况下,如果它是custom class / reference type and not primitive type,那么重写EqualsGetHashcode方法以进行正确的操作,否则它将对对象进行引用比较。您的案例关键似乎是double - primitive type,这是好的

  • OrderByDescending(value => value.Count())
  • 这应该很简单,取IGrouping elements中的Count,对每个Groupingdescending的顺序排列。结果是IOrderedEnumerable<IGrouping<Key,Value>>,按分组元素Count

    排列
  • First()
  • 取count值最大的First元素,即只选择一个IGrouping<Key,Value>

  • Key
  • First元素的Key,返回为result