假设我有一个 IEnumerable。例如,{2,1,42,0,9,6,5,3,8}。
我需要获得与谓词匹配的项目的“运行”。例如,如果我的谓词是
bool isSmallerThanSix(int number){...}
我想得到以下输出:
{{2,1},{0},{5,3}}
是否有一个内置函数可以完成此任务?
到目前为止我有这个:
public static IEnumerable<IEnumerable<T>> GetSequences<T>(this IEnumerable<T> source,
Func<T, bool> selector) {
if (source == null || selector == null) {
yield break;
}
IEnumerable<T> rest = source.SkipWhile(obj => !selector(obj));
while (rest.Count() > 0) {
yield return rest.TakeWhile(obj => selector(obj));
rest = rest
.SkipWhile(obj => selector(obj))
.SkipWhile(obj => !selector(obj));
}
}
这似乎有效,但是我在半夜写的,因此从周二开始效率低下十五种。有没有更好的、最好是内置的(因此经过充分测试)的方法?
非常感谢大家抽出宝贵的时间
Ria.