多くの要素を持つ2つ以上のIEnumerable<T>
があるとします。 IEnumerable
には別のタイプのT
があります。リストは極端に長くなる可能性があり、完全にメモリにロードすべきではありません。私が何をしたいか複数のIEnumerableを同時に繰り返し処理する方法
IEnumerable<int> ints = getManyInts();
IEnumerable<string> strings = getSomeStrings();
IEnumerable<DateTime> dates = getSomeDates();
は最長の終わりまたは最短リストに達するまで、これらのリストを反復処理し、各ステップのために1つのint型、1つの文字列と1のDateTimeを含むアイテムを取得することです。両方のケースをサポートする必要があります(bool param longest vs. shortest or so)。より短いリストで利用できないすべてのアイテムについては(すでに終了しているため)、私はデフォルト値を期待しています。
for(Tuple<int,string,DateTime> item in
Foo.Combine<int,string,DateTime>(ints, strings, dates))
{
int i=item.Item1;
string s=item.Item2;
DateTime d=item.Item3;
}
遅延実行を使用してlinqでこれを行うことはできますか? IEnumeratorsとyield returnを直接組み合わせたソリューションが分かります。 (未テスト警告 - )は、このようなHow can I iterate over two IEnumerables simultaneously in .NET 2
あなたは以上の2つのパラメータを受け入れる 'Zip'機能を探しています。 – Gabe
あなたは 'var result = s1.Zip(s2.Zip(s3、(a、b)=> new {a、b})、(a、b)=> new {a = a 、b = ba、c = bb}); ' – Mormegil
s2が最長リストであり、s1の要素がほとんどない場合はどうなりますか? –