我一直在尝试寻找一种方法让 LINQ 能够选择给定列表的前 n%。我能得到的最接近的是 take 语句,它的工作方式类似于 TOP PERCENT SQL 语句,但不支持百分比。我确定我遗漏了一些明显的东西,但我似乎看不到它。
问问题
3001 次
1 回答
8
假设源是一个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()
方法)一起使用,但它会枚举序列两次,这通常被认为是一件坏事。
于 2013-05-02T00:22:07.480 回答