I have three s开发者_开发百科tring arrays. I want to combine them using zip in linq. How to do?
arr1.Zip(arr2, (a1, a2) => a1 + a2);
How to add arr3?
You can use Zip again:
arr1.Zip(arr2, (a1, a2) => new { a1, a2 })
    .Zip(arr3, (a12, a3) => a12.a1 + a12.a2 + a3)
or
arr1.Zip(arr2, (a1, a2) => a1 + a2)
    .Zip(arr3, (a12, a3) => a12 + a3)
The former version avoids one extra string concatenation.
I prefer using a custom Zip which takes as many sequences as you need.
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 );
        }
    }
}
This is basically Jon Skeet's implementation with one extra parameter, so all credit goes to him. ;p I believe this has some advantages in some scenarios, where you would otherwise need intermediate objects. I definitely find it clearer.
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论