可能重复:
使用Linq从3个集合创建项目
我按如下方式执行了两个序列的zippage.
IEnumerable<Wazoo> zipped = arr1.Zip(arr2, (outer, inner) =>
new Wazoo{P1 = outer, P2 = inner});
Run Code Online (Sandbox Code Playgroud)
现在,我才意识到我将使用三个序列,而不是两个.所以我尝试将代码重新设计为以下内容:
IEnumerable<Wazoo> zipped = arr1.Zip(arr2, arr3, (e1, e2, e3) =>
new Wazoo{P1 = e1, P2 = e2, P3 = e3});
Run Code Online (Sandbox Code Playgroud)
当然,它没有用.有没有办法部署Zip以实现我的目标?这种用法还有其他方法吗?我是否必须压缩其中的两个序列,然后将第三个序列拉链,并在此过程中解压缩它们?
此时我即将创建一个简单的for循环和yield return请求的结构.我是不是该?我在.Net 4.
Ser*_*rvy 11
你可以使用两个现有的调用Zip(它会有点乱,但它可以工作)或者你可以自己Zip做3个序列.
public static IEnumerable<TResult> Zip<TFirst, TSecond, TThird, TResult>
(this IEnumerable<TFirst> source, IEnumerable<TSecond> second
, IEnumerable<TThird> third
, Func<TFirst, TSecond, TThird, TResult> selector)
{
using(IEnumerator<TFirst> iterator1 = source.GetEnumerator())
using(IEnumerator<TSecond> iterator2 = second.GetEnumerator())
using (IEnumerator<TThird> iterator3 = third.GetEnumerator())
{
while (iterator1.MoveNext() && iterator2.MoveNext()
&& iterator3.MoveNext())
{
yield return selector(iterator1.Current, iterator2.Current,
iterator3.Current);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
674 次 |
| 最近记录: |