c# - LINQ 中的返回模态平均值(模式)

标签 c# linq ienumerable

我不确定在这里使用 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/

相关文章:

c# - 按对象的内部字段排序 List<T>

javascript - Angular2 服务未将 JSON 传递给 WebAPI

c# - .xmla 使用 C# 部署到 SQL

c# - 自定义堆二叉树实现——随机节点删除

c# - WP7 XAML 中控件之间的动态绑定(bind)

c# - 如果交换逻辑,具有三元运算的 LINQ 运算会导致测试失败

c# Dynamic.Linq - groupby,然后按条件选择

c# - 身份 2.2.1 中具有角色列表的用户列表

c# - 'yield return' 返回什么具体类型?

c# - 从 C# 中的yield 返回 IEnumerable<T>