【发布时间】:2012-11-26 05:10:29
【问题描述】:
我编写了以下扩展方法,它查找满足传递给它的谓词的连续项序列。序列中连续项的数量由参数'sequenceSize决定。
例如,我可能有一个 IEnumerable 整数,我想找到 10 个大于 100 的连续值。此扩展方法将确定是否存在这样的序列。
这种方法效果很好。但是,由于它必须做的事情,如果 IEnumerable 中有大量元素,它可能会很慢,因为它必须从第一个元素开始,寻找满足谓词的连续值,然后转到第二个元素并执行同样的等等。
我正在寻找有关如何加快速度的建议。我尝试使用 AsParallel() 但这没有影响。
public static IEnumerable<IEnumerable<T>> FindSequenceConsecutive<T>(this IEnumerable<T> sequence,
Predicate<T> predicate,
int sequenceSize)
{
IEnumerable<T> current = sequence;
while (current.Count() > sequenceSize)
{
IEnumerable<T> window = current.Take(sequenceSize);
if (window.Where(x => predicate(x)).Count() >= sequenceSize)
yield return window;
current = current.Skip(1);
}
}
【问题讨论】:
标签: linq