152

Enumerable.ZipLinqでの拡張メソッドの使用は何ですか?

4

9 に答える 9

7

他の人が述べているように、Zip を使用すると、2 つのコレクションを組み合わせて、さらに Linq ステートメントまたは foreach ループで使用できます。

for ループと 2 つの配列が必要だった操作は、無名オブジェクトを使用して foreach ループで実行できるようになりました。

私が発見したばかりの例は、ちょっとばかげていますが、並列化が有益である場合に役立つ可能性があるのは、副作用のある単一行のキュー トラバーサルです。

timeSegments
    .Zip(timeSegments.Skip(1), (Current, Next) => new {Current, Next})
    .Where(zip => zip.Current.EndTime > zip.Next.StartTime)
    .AsParallel()
    .ForAll(zip => zip.Current.EndTime = zip.Next.StartTime);

timeSegments は、キュー内の現在のアイテムまたはデキューされたアイテムを表します (最後の要素は Zip によって切り捨てられます)。timeSegments.Skip(1) は、キュー内の次のアイテムまたはピーク アイテムを表します。Zip メソッドは、これら 2 つを Next プロパティと Current プロパティを持つ 1 つの匿名オブジェクトに結合します。次に、Where でフィルター処理し、AsParallel().ForAll で変更します。もちろん、最後のビットは通常の foreach または問題のある時間セグメントを返す別の Select ステートメントである可能性があります。

于 2014-08-15T14:22:45.297 に答える
0
string[] fname = { "mark", "john", "joseph" };
string[] lname = { "castro", "cruz", "lopez" };

var fullName = fname.Zip(lname, (f, l) => f + " " + l);

foreach (var item in fullName)
{
    Console.WriteLine(item);
}
// The output are

//mark castro..etc
于 2014-06-05T08:36:49.110 に答える