3 IEnumerables到1元组

时间:2014-07-04 10:51:03

标签: c# tuples ienumerable

我有3个IEnumebles的整数,我想用它来制作一个Tuple数组。什么是最好的方法?如果我只有2个IEnumebles,我会使用Zip,但在这种情况下?

2 个答案:

答案 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));