2011-09-09 24 views
28

संक्षेप मैं एक विशुद्ध रूप से काल्पनिक समस्या जो लगता है यह एक आसान समाधान है की तरह अगर मैं सही LINQ विधि को खोजने के ...जोड़ना/दो सरणियों

का सामना किया है मैं ints के दो सरणियों है और मुझे पता है कि वे कर रहे हैं एक माप। मैं एक ही आकार की तीसरी सरणी बनाना चाहता हूं जहां तीसरे सरणी में तत्व संबंधित स्थिति में पहले दो सरणी में तत्वों का योग हैं।

नीचे एक तरीका है जो दिखाना चाहिए कि मैं क्या करना चाहता हूं।

public static int[] AddArrays(int[] a, int[] b) 
{ 
    int[] newArray = new int[a.Length]; 
    for (int i = 0; i<a.Length; i++) 
    { 
     newArray[i]=a[i]+b[i]; 
    } 
    return newArray; 
} 

वहाँ रहे हैं किसी भी Linq तरीकों कि मैं सिर्फ तरह

return a.DoStuff(b, (x,y) => x+y) 

या ऐसा ही कुछ कर सकते हैं?

मुझे ध्यान रखना चाहिए कि यह शायद होमवर्क की श्रेणी में पड़ता है क्योंकि मूल समस्या उस वेबसाइट से आई थी, जिस पर मैं देख रहा था (हालांकि मुझे समस्या का सीधा लिंक नहीं मिल रहा है) और एक प्रश्न के रूप में नहीं काम या कुछ भी।

यदि कोई आसान विधि मौजूद नहीं है तो ऐसा करने के लिए सबसे अधिक लिंककी तरीका क्या है? एक array.each में दूसरी सरणी को आसानी से इंडेक्स करने में सक्षम होने की समस्या नहीं होगी, जिससे आप मुझे आश्चर्यचकित कर सकते हैं कि लिनक उस स्थिति में किसी भी मदद की होगी ...

+1

FYI करें, यह आम तौर पर एक "ज़िप" (ज़िपर सादृश्य स्पष्ट होना चाहिए) कहा जाता है और Linq इसके लिए कोई अंतर्निहित समर्थन हासिल है, हो सकता है 'SelectMany' के माध्यम से छोड़कर।/संपादित करें स्पष्ट रूप से वर्तमान संस्करण में अब सच नहीं है। –

+0

ज़िप इन लोगों ने उत्तर दिया है केवल .NET 4 – Zenwalker

+0

@zenwalker पर उपलब्ध है: हाँ और यही कारण है कि फ्रेमवर्क संस्करण को जितनी जल्दी हो सके अपग्रेड करना बेहतर है, बहुत साफ विशेषताएं हैं;) – sll

उत्तर

41

ज़िप यह :)

var a = new int[] {1,2,3 }; 
var b = new int[] {4,5,6 }; 
a.Zip(b, (x, y) => x + y) 
+0

बहुत बढ़िया, यह दिखाने के लिए धन्यवाद! – Austin

1
IList<int> first = new List<int> { 2, 3, 4, 5 }; 
IList<int> second = new List<int> { 2, 3, 4, 5 }; 

var result = Enumerable.Zip(first, second, (a, b) => a + b); 
10

आप पद्धति का चयन करें का उपयोग कर सकते हैं।

int[] a = new[] { 1, 2, 3 }; 
int[] b = new[] { 10, 20, 30 }; 

var c = a.Select ((x, index) => x + b[index]).ToArray(); 
+1

कौन सा पास करेगा और फिर सूचकांक में वृद्धि करेगा? – sll

+3

सूचकांक LINQ प्रक्रिया द्वारा प्रदान किया जाता है। –

+0

धन्यवाद, अच्छी सुविधा! – sll

4
public static int[] AddArrays(int[] a, int[] b) 

{ 
    return a.Zip(b, (x,y) => x+y).ToArray(); 
} 
संबंधित मुद्दे