Linq 组合3个序列

Linq 组合3个序列,linq,Linq,我有三个字符串数组。我想在linq中使用zip组合它们。怎么办 arr1.Zip(arr2, (a1, a2) => a1 + a2); 如何添加arr3?您可以再次使用Zip: arr1.Zip(arr2, (a1, a2) => new { a1, a2 }) .Zip(arr3, (a12, a3) => a12.a1 + a12.a2 + a3) 或 前一个版本避免了一个额外的字符串连接。我更喜欢使用一个定制的Zip,它可以根据需要获取尽可能多的序列 pub

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

arr1.Zip(arr2, (a1, a2) => a1 + a2);
如何添加arr3?

您可以再次使用Zip:

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


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

我更喜欢使用一个定制的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 );
        }
    }
}

这基本上是一个额外的参数,所以所有的功劳都归于他;我相信这是有的,否则你会需要中间对象。我确实觉得更清楚。

173K??是173还是173000?看起来我可以闭上眼睛,听从你的建议超人:)我发布的链接也包含正确的答案吗?@As:是的,链接与我的第二个片段基本相同。
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 );
        }
    }
}