我有三个字符串数组。我想在linq中使用zip组合它们。怎么办?
arr1.Zip(arr2, (a1, a2) => a1 + a2);
如何添加arr3?
答案 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,否则你需要中间对象。我肯定觉得它更清楚。