我不确定在这里使用 CopyMost 是否正确,但这是我的客户使用的术语(“CopyMost 数据协议(protocol)”)。听起来他想要模式?我有一组数据:
Increment Value
.02 1
.04 1
.06 1
.08 2
.10 2
我需要返回哪个值出现最多“CopyMost”。在这种情况下,该值为 1。现在我计划为 IEnumerable 编写一个扩展方法来为整数值执行此操作。 Linq 中是否内置了一些已经可以轻松做到这一点的东西?或者我最好编写一个看起来像这样的扩展方法
records.CopyMost(x => x.Value);
编辑
看起来我正在寻找模态平均值。我提供了一个允许决胜局条件的更新答案。它应该像这样使用,并且是通用的。
records.CopyMost(x => x.Value, x => x == 0);
在这种情况下,x.Value 将是一个 int,如果 0 的计数与 1 和 3 的计数相同,它将在 0 上平局。
最佳答案
好吧,这是一个选择:
var query = (from item in data
group 1 by item.Value into g
orderby g.Count() descending
select g.Key).First();
基本上我们使用 GroupBy
按值分组 - 但我们对每个组感兴趣的是组的大小和键(这是原始值)。我们按大小对组进行排序,并取第一个元素(元素最多的那个)。
这有帮助吗?
关于c# - LINQ 中的返回模态平均值(模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3111146/