2011-11-29 7 views
14

मेरे पास दो IEnumerable<double> है, कि मैं Tuple<int, double, double> से IEnumerable बनाना चाहता हूं। Tuple आइटम का सूचकांक, Item2 पहले संग्रह में इंडेक्स-वें स्थान में मूल्य होना चाहिए, और Item3 दूसरे संग्रह में अनुक्रमणिका-वें स्थान में मान होना चाहिए। क्या यह ऐसा कुछ है जो लिंक में आसानी से किया जा सकता है?क्या मैं लिंक का उपयोग कर आईनेमरेबल्स से टुपल्स बना सकता हूं?

उदा।

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 अधिभार उस तत्व के सूचकांक प्रदान करता है के साथ के बारे में:

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

उत्कृष्ट:

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

वैसे, आप के रूप में अच्छी तो विधि सामान्य बना सकता है , धन्यवाद! इच्छा है कि मैं आपको ज़िप एक्सटेंशन में पेश करने के लिए एक अतिरिक्त वोट दे सकता हूं :) –

+0

और मेरी इच्छा है कि मैं ज़िप और अधिभारित चयन के लिए दो बार ऊपर उठा सकूं। – drdwilcox

संबंधित मुद्दे