我有3个IEnumebles的整数,我想用它来制作一个Tuple数组。什么是最好的方法?如果我只有2个IEnumebles,我会使用Zip,但在这种情况下?
答案 0 :(得分:8)
这是一个最容易直接使用迭代器的方案,而不是foreach
:
using(var i1 = seq1.GetEnumerator())
using(var i2 = seq2.GetEnumerator())
using(var i3 = seq3.GetEnumerator())
{
while(i1.MoveNext() && i2.MoveNext() && i3.MoveNext())
{
var tuple = Tuple.Create(i1.Current, i2.Current, i3.Current);
// ...
}
}
这里的// ...
可以是:
yield return tuple
someList.Add(tuple);
答案 1 :(得分:3)
Zip
两次可能(尽管可能不是最佳性能解决方案),如:
var result = seq1.Zip(seq2, Tuple.Create)
.Zip(seq3, (t2, z) => Tuple.Create(t2.Item1, t2.Item2, z));