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