我可以使用Linq从IEnumerables构建元组吗?

Jac*_*ope 14 c# linq tuples

我有2个IEnumerable<double>S,我想建立一个IEnumerableTuple<int, double, double>距离.Item1Tuple应是项的索引,Item2所述第一集合中的索引中的第地方的值,和Item3所述第二集合中的索引中的第地方的值.这是Linq可以轻松完成的吗?

例如

var first = new List<double>() { 10.0, 20.0, 30.0 };
var second = new List<double>() { 1.0, 2.0, 3.0 };
var result = TupleBuild(first, second);
// result = {(0, 10.0, 1.0), (1, 20.0, 2.0), (2, 30.0, 3.0)}
Run Code Online (Sandbox Code Playgroud)

哪里:

IEnumerable<Tuple<int, double, double>> TupleBuild(IEnumerable<double> first, IEnumerable<double> second)
{ 
     // does some funky Linq
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以为此编写一些速记代码,但如果Linq覆盖了这个,我宁愿不重新发明轮子.

Ani*_*Ani 22

如何使用Zip运算符和Select提供元素索引的重载:

return first.Zip(second, Tuple.Create)
            .Select((twoTuple, index)
                      => Tuple.Create(index, twoTuple.Item1, twoTuple.Item2));
Run Code Online (Sandbox Code Playgroud)

顺便说一下,您可以将方法设为通用:

IEnumerable<Tuple<int, TFirst, TSecond>> TupleBuild<TFirst, TSecond>
(IEnumerable<TFirst> first, IEnumerable<TSecond> second) { ... }
Run Code Online (Sandbox Code Playgroud)