2010-05-04 16 views
1

我有三個字符串數組。我想在linq中使用zip將它們結合起來。怎麼做?組合3個序列

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

如何添加arr3?

回答

2

您可以再次使用郵編:

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) 

前者版本避免了一個額外的字符串連接。

+0

173K ??那173或173,000?看起來像我可以閉上眼睛,並按照你的建議超人:)是我張貼的鏈接還包含正確的答案? – 2010-05-04 11:52:16

+0

@As:是的,鏈接基本上與我的片段中的第二部分基本相同。 – 2010-05-04 12:13:10

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一個額外的參數,因此所有歸功於他。 ;我相信這有some advantages in some scenarios,否則你會需要中間對象。我絕對認爲它更清晰。