我一直试图找到一种方法让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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,它可以使用IEnumerable<T>(使用该Count()方法),但它会枚举序列两次,这通常被认为是一件坏事.
| 归档时间: |
|
| 查看次数: |
2301 次 |
| 最近记录: |