合并3个序列

时间:2010-05-04 11:31:09

标签: linq

我有三个字符串数组。我想在linq中使用zip组合它们。怎么办?

arr1.Zip(arr2, (a1, a2) => a1 + a2);

如何添加arr3?

2 个答案:

答案 0 :(得分:3)

您可以再次使用Zip:

arr1.Zip(arr2, (a1, a2) => new { a1, a2 })
    .Zip(arr3, (a12, a3) => a12.a1 + a12.a2 + a3)

arr1.Zip(arr2, (a1, a2) => a1 + a2)
    .Zip(arr3, (a12, a3) => a12 + a3)

前一个版本避免了一个额外的字符串连接。

答案 1 :(得分:0)

我更喜欢使用自定义Zip,它可以根据需要使用尽可能多的序列。

public static IEnumerable Zip(
    this IEnumerable first,
    IEnumerable second,
    IEnumerable third,
    Func resultSelector )
{
    Contract.Requires(
        first != null && second != null && third != null && resultSelector != null );

    using ( IEnumerator iterator1 = first.GetEnumerator() )
    using ( IEnumerator iterator2 = second.GetEnumerator() )
    using ( IEnumerator iterator3 = third.GetEnumerator() )
    {
        while ( iterator1.MoveNext() && iterator2.MoveNext() && iterator3.MoveNext() )
        {
            yield return resultSelector( iterator1.Current, iterator2.Current, iterator3.Current );
        }
    }
}

这基本上是Jon Skeet's implementation,只有一个额外的参数,所以所有的功劳归于他。 ; p我相信这有some advantages in some scenarios,否则你需要中间对象。我肯定觉得它更清楚。