シーケンス内の要素を検索し、2 つIEnumerable<T>
の を返す次の拡張メソッドがあります。1 つはその要素の前のすべての要素を含み、もう 1 つは要素とそれに続くすべての要素を含みます。メソッドが遅延していればいいのですが、それを行う方法がわかりません。誰でも解決策を思い付くことができますか?
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
反復が 2 回反復される可能性があります。そして、呼び出しコードが何をするかに応じて、さらに何度も。