2011-11-29 38 views
14

我有兩個IEnumerable<double> s,我想建立一個IEnumerableTuple<int, double, double>從。 Item1Tuple應該是該項目的索引,Item2是第一個集合中第index個位置的值,Item3是第二個集合中第index個位置的值。這在Linq中可以輕鬆完成嗎?我可以使用Linq從IEnumerables構建元組嗎?

E.g.

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)} 

其中:

IEnumerable<Tuple<int, double, double>> TupleBuild(IEnumerable<double> first, IEnumerable<double> second) 
{ 
    // does some funky Linq 
} 

我知道我可以寫一些這方面的手寫代碼,但我寧願不另起爐竈如果Linq的有這個覆蓋。

回答

22

如何與Zip運營商和Select重載提供了元素的索引:

return first.Zip(second, Tuple.Create) 
      .Select((twoTuple, index) 
         => Tuple.Create(index, twoTuple.Item1, twoTuple.Item2)); 

順便說一句,你不妨再使該方法一般:

IEnumerable<Tuple<int, TFirst, TSecond>> TupleBuild<TFirst, TSecond> 
(IEnumerable<TFirst> first, IEnumerable<TSecond> second) { ... } 
+0

優秀, 謝謝!希望我可以給你一個額外的投票給我介紹給Zip擴展:) –

+0

我希望我可以upvote兩次Zip和重載選擇。 – drdwilcox

相關問題