努力理解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;
}
让我们来解剖你的Linq Query
的不同部分。这里,每个调用的结果/输出充当下一个调用的输入,以处理数据
-
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
,那么重写Equals
和GetHashcode
方法以进行正确的操作,否则它将对对象进行引用比较。您的案例关键似乎是double - primitive type
,这是好的
-
OrderByDescending(value => value.Count())
-
First()
-
Key
这应该很简单,取IGrouping elements
中的Count
,对每个Grouping
按descending
的顺序排列。结果是IOrderedEnumerable<IGrouping<Key,Value>>
,按分组元素Count
取count值最大的First
元素,即只选择一个IGrouping<Key,Value>
取First
元素的Key,返回为result