LINQ

2009-04-23 6 views
5

में स्थिति के बजाए क्रमशः 2 सूचियों में शामिल हों, मैं बराबर लंबाई की 2 सूचियों (समान लंबाई की तीसरी सूची तैयार करने के लिए) में कैसे शामिल हो सकता हूं, जहां मैं एक शर्त निर्दिष्ट नहीं करना चाहता हूं लेकिन बस वस्तुओं के क्रम पर भरोसा करता हूं 2 सूचियांLINQ

जैसे मैं कैसे शामिल हो सकते हैं:

{1,2,3,4} with {5,6,7,8} 

निर्माण करने के लिए:

from i in new []{1,2,3,4} 
from j in new []{5,6,7,8} 
select new { i, j } 

लेकिन यह एक क्रॉस में शामिल होने का उत्पादन:

{{1,5}, {2,6}, {3,7}, {4,8}} 

मैं निम्नलिखित की कोशिश की है। जब मैं शामिल होने का उपयोग करता हूं, तो मुझे हमेशा "चालू" निर्दिष्ट करने की आवश्यकता होती है।

उत्तर

15

आप पहली सूची में Select उपयोग करते हैं, आइटम सूचकांक का उपयोग करें और दूसरी सूची पर तत्व पहुंच सकता है:

var a = new [] {1,2,3,4}; 
var b = new [] {5,6,7,8}; 

var qry = a.Select((i, index) => new {i, j = b[index]}); 
+0

बहुत बढ़िया जवाब। +1 –

+0

बहुत अच्छा !!! :) – Ryan

0

वहाँ, एक आधे रास्ते समाधान है आप क्वेरी सिंटैक्स उपयोग करना चाहते हैं। इस अर्थ में आधा तरीका है कि आपको उस सूची में उपयोग करने वाले इंडेक्स प्राप्त करने के लिए दोनों सूचियों पर चयन विधि का उपयोग करने की आवश्यकता है।

int[] list1 = {1,2,3,4}; 
int[] list2 = {5,6,7,8}; 

var result = from item1 in list1.Select((value, index) => new {value, index}) 
      from item2 in list2.Select((value, index) => new {value, index}) 
      where item1.index == item2.index 
      select new {Value1 = item1.value, Value2 = item2.value}; 

इस समाधान के साथ लाभ यह है कि यह अभ्यस्त असफल हो सूचियों अलग-अलग लंबाई है, समाधान इंडेक्सर का उपयोग कर के रूप में है।

5

यदि आप .NET 4.0 का उपयोग कर रहे हैं, तो आप ज़िप एक्सटेंशन विधि और टुपल्स का उपयोग कर सकते हैं।

var a = new [] {1,2,3,4}; 
var b = new [] {5,6,7,8}; 

var result = a.Zip(b, (an, bn) => Tuple.Create(an, bn)); 

वैकल्पिक रूप से, आप उन्हें सरणियों के रूप में रख सकते हैं:

var resultArr = a.Zip(b, (an, bn) => new []{an, bn});