我有以下扩展方法来查找序列中的一个元素,然后返回两个IEnumerable<T>
s:一个包含该元素之前的所有元素,一个包含该元素及其后面的所有内容。如果该方法是懒惰的,我会更喜欢,但我还没有找到一种方法来做到这一点。任何人都可以提出解决方案吗?
public static PartitionTuple<T> Partition<T>(this IEnumerable<T> sequence, Func<T, bool> partition)
{
var a = sequence.ToArray();
return new PartitionTuple<T>
{
Before = a.TakeWhile(v => !partition(v)),
After = a.SkipWhile(v => !partition(v))
};
}
立即sequence.ToArray()
行动违反了懒惰的要求。然而,如果没有这条线,一个昂贵的迭代sequence
可能会被迭代两次。并且,根据调用代码的作用,更多次。