2011-01-26 19 views
29

लि .: .NET4 सी #LINQ का उपयोग करके 2 सूचियों को कैसे जोड़ें?

हाय सभी,

मैं इन 2 सूचियां संयोजित करना चाहते हैं: यह एक में { "A", "B", "C", "D" } और { "1", "2", "3" }

: जाहिर है

{ "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3", "D1", "D2", "D3" } 

, मैं इस्तेमाल कर सकते हैं स्थिर फंदा। लेकिन मुझे आश्चर्य है कि LINQ मदद कर सकता है या नहीं। जहां तक ​​मैं समझता हूं, ज़िप() इस मामले में मेरा मित्र नहीं है, है ना?

aList.SelectMany(a => bList.Select(b => a + b))

+2

आमतौर पर जब LINQ में कुछ इस तरह शुरू, यह पूछने के लिए फायदेमंद है – SWeko

उत्तर

37

अनिवार्य रूप से, आप एक कार्तीय उत्पाद पैदा करते हैं और उसके बाद प्रत्येक 2 के तत्वों को श्रेणीबद्ध हैं:

TIA,

+1

जैसा कि जॉन ने इंगित किया, * मुझे यह जवाब (इस लेखन के रूप में) के बीच सबसे अधिक पढ़ने योग्य लगता है। असल में, यह नेस्टेड लूप से मेल खाता है जिसे हम LINQ के बिना उपयोग करेंगे, अन्य लोग इस उत्तर को नहीं चुनने के लिए तर्क के रूप में ले सकते हैं। लेकिन निश्चित रूप से, मैं स्वीकार किए गए 3 उत्तरों को चिह्नित करने में सक्षम होना पसंद करूंगा :-) –

59

उपयोग SelectMany आप दो सूचियों की कार्तीय उत्पाद बनाने के लिए चाहते हैं जब -tuple। इस क्वेरी-वाक्य रचना में सबसे आसान है:

var cartesianConcat = from a in seq1 
         from b in seq2 
         select a + b; 
+1

यह बहुत खूबसूरत है 'मैं इस करता है, तो ये एक डेटाबेस में तालिकाओं थे करना होगा'! यही कारण है कि मैं LINQ प्यार करता हूँ! – Chris

+0

+1, सुंदर और संक्षिप्त ... –

25

SelectMany निश्चित रूप से सही दृष्टिकोण है खंड "से" या एक सीधे कॉल के साथ कई का उपयोग कर कि क्या है, लेकिन यहां इसके बारे में Hightechrider के उपयोग के लिए एक विकल्प है:

var result = aList.SelectMany(a => bList, (a, b) => a + b); 

मुझे व्यक्तिगत रूप से यह समझना आसान लगता है क्योंकि यह "एकाधिक से" संस्करण के करीब है: प्रत्येक "ए" में "एलीस्ट" में, हम एक नया अनुक्रम उत्पन्न करते हैं - इस मामले में यह हमेशा "bList" होता है। कार्टेसियन में शामिल प्रत्येक (ए, बी) जोड़ी के लिए, हम परिणाम के लिए प्रोजेक्ट करते हैं जो कि दोनों के साथ मिलकर बनता है।

बस स्पष्ट होना: दोनों दृष्टिकोण काम करेंगे। मैं बस इसे पसंद करता हूं :)

यह पूछताछ करें कि यह क्वेरी अभिव्यक्ति वाक्यविन्यास से स्पष्ट है या नहीं ... मुझे यकीन नहीं है। I आमतौर पर उपयोग विधि कॉल का उपयोग करते हैं, जब यह केवल एक ऑपरेटर का उपयोग करने का मामला है, लेकिन Join, GroupJoin, SelectMany और GroupBy, क्वेरी अभिव्यक्तियों को सरल बनाते हैं। दोनों प्रयास करें और देखें जो आप अधिक पठनीय लगता है :)

+9

अरे जॉन, हमेशा पूछना चाहता था, आप कितनी बार एसओ पर हैं? :) –

+4

@The_Butcher: ओह, मैं हर बार अक्सर पॉप करता हूं ... –

+2

@The_Butcher: http://meta.stackexchange.com/questions/555/why-does-jon-skeet-never-sleep/566#566 –

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