0. सुरक्षित समाधान - एक्सटेंशन विधि
public static class Util {
public static void AddAll<T>(this Stack<T> stack1, Stack<T> stack2) {
T[] arr = new T[stack2.Count];
stack2.CopyTo(arr, 0);
for (int i = arr.Length - 1; i >= 0; i--) {
stack1.Push(arr[i]);
}
}
}
शायद सबसे अच्छा एक विस्तार विधि बनाने के लिए है। ध्यान दें कि मैं अन्य ढेर के "शीर्ष पर" पहले ढेर डाल रहा हूँ ताकि से पाशन द्वारा बात करने के लिए 0. arr.Length -1 को तो यह कोड:
Stack<int> x = new Stack<int>();
x.Push(1);
x.Push(2);
Stack<int> y = new Stack<int>();
y.Push(3);
y.Push(4);
x.AddAll(y);
एक्स से किया जा रहा में परिणाम होगा: 4,3 , 2,1। यदि आप 1,2,3,4 दबाते हैं तो आप क्या उम्मीद करेंगे। बेशक, यदि आप अपने दूसरे ढेर और वास्तव में पॉप तत्वों के माध्यम से लूप करना चाहते थे और फिर उन्हें पहले स्टैक पर धक्का देना था, तो आप 1,2,4,3 के साथ समाप्त हो जाएंगे। फिर, जब आप फिट देखते हैं तो लूप के लिए संशोधित करें। या आप यह निर्दिष्ट करने के लिए एक और पैरामीटर जोड़ सकते हैं कि आप कौन सा व्यवहार चाहते हैं। मेरे पास जावा आसान नहीं है, इसलिए मुझे नहीं पता कि वे क्या करते हैं।
यह कहकर, आप कर सकते हैं, लेकिन मुझे कोई गारंटी नहीं है कि यह काम जारी रहेगा। टोलिस्ट को कॉल करते समय एमएस हमेशा डिफ़ॉल्ट व्यवहार को कैसे बदल सकता है। लेकिन, इस कम है, और पर .NET 4.5 के साथ मेरी मशीन ऊपर विस्तार पद्धति के रूप में एक ही काम करता है:
1 लाइन Linq समाधान:
y.Reverse().ToList().ForEach(item => x.Push(item));
शायद थोड़ा सा उलझन, लेकिन 'ArrayList' को कास्ट करना http://msdn.microsoft.com/en-us/library/system.collections.arraylist.insertrange(v=vs.110).aspx और फिर स्टैक पर वापस कास्टिंग? – rdodev
डुप्लिकेट? http://stackoverflow.com/questions/1594264/pushing-items-into-stack-with-linq –
प्रत्येक स्टैक को ऐरे में कॉपी कर सकता है फिर सरणी का उपयोग करें। सरणी को मर्ज करने के लिए कॉपी करें और फिर एआर को सीटीआर में एक नए स्टैक पर लोड करें लेकिन मुझे लगता है कि मैं सिर्फ लूप होगा। – Paparazzi