c# - 使用 LINQ 获取列表的前 N%

标签 c# linq list

<分区>

我一直在努力寻找一种方法,让 LINQ 能够选择给定列表的前 n%。我能得到的最接近的是 take 语句,它的工作方式类似于 TOP PERCENT SQL 语句,但不支持百分比。我确定我遗漏了一些明显的东西,但我似乎不太明白。

最佳答案

假设来源是 ICollection<T> (而不仅仅是一个 IEnumerable<T> ),你可以这样做:

public static IEnumerable<T> TakePercent<T>(this ICollection<T> source, double percent)
{
    int count = (int)(source.Count * percent / 100);
    return source.Take(count);
}

请注意,它可以与 IEnumerable<T> 一起使用(使用 Count() 方法),但它会枚举序列两次,这通常被认为是一件坏事。

关于c# - 使用 LINQ 获取列表的前 N%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328130/

相关文章:

c# - 单元测试 WCF 错误

.net - WhereNot linq 表达式

c# - 包含项目的列表返回空

python - 过滤列表中与每行 pandas 的条件匹配的第一个元素

c# - 在 C# 中创建仅适用于特定类型的通用函数

c# - 为什么 ContextMenu(弹出菜单)不显示?

c# - while 循环 C# 的登录系统问题

c# - 使用 Linq 对数据集进行分区

c# - C#计算两年间的闰年数

list - Scala:从第一个非零元素切分列表