2009-07-10 28 views
8

का उपयोग कर मैं इस सूचीस्वैप सूची <> LINQ

वर सूची = नई सूची है ग # साथ तत्वों {3, 1, 0, 5};

मैं के साथ 2

उत्पादन 0, 1, 3 तत्व 0 स्वैप करने के लिए चाहते हैं, 5

+0

की संभावित डुप्लिकेट [सूची में स्वैप दो आइटम ] (http://stackoverflow.com/questions/2094239/swap-two-items-in-listt) – QuarK

उत्तर

16

यदि आप इसे सॉर्ट करना चाहते हैं, तो मैं List.Sort() का उपयोग करूंगा।

यदि आप स्वैप करना चाहते हैं, तो ऐसा करने के लिए कोई तरीका नहीं बनाया गया है। यह एक विस्तार विधि लिखना आसान है, हालांकि होगा:

static void Swap<T>(this List<T> list, int index1, int index2) 
{ 
    T temp = list[index1]; 
    list[index1] = list[index2]; 
    list[index2] = temp; 
} 

फिर आप कर सकता है:

list.Swap(0,2); 
+0

तुम मुझे हरा! मैं अभी भी एक आईनेमरेबल वापस कर दूंगा। –

+2

आप इंडेक्स द्वारा आईनेमरेबल तक नहीं पहुंच सकते हैं, इसलिए आपकी विधि काम नहीं करेगी। आप एक आईनेमरेबल लौटा सकते हैं, लेकिन जब तक आप एक प्रतिलिपि नहीं बनाते, तब तक यह संभावित रूप से अप्रत्याशित व्यवहार होगा, क्योंकि आप संशोधित संग्रह को वापस कर देंगे। एक प्रति का निर्माण ओवरहेड जोड़ देगा। –

+0

आप Enumerable.ElementAt का उपयोग करके इंडेक्स द्वारा एक आईनेमेरेबल तक पहुंच सकते हैं। –

2

क्लासिक स्वैप है ...


int temp = list[0]; 
list[0] = list[2]; 
list[2] = temp; 

मुझे नहीं लगता कि किसी भी Linq है है अगर आप यही खोज रहे हैं तो 'स्वैप' कार्यक्षमता।

1

मामले में जो सीधे कुछ समर्थित नहीं है ... यह तो नंबर 1!

"extension methods" की अवधारणा पर एक नज़र डालें। इसके साथ आप आसानी से स्वैप() की अवधारणा का समर्थन कर सकते हैं (यह किसी भी समय किसी वर्ग की कार्यक्षमता को विस्तारित करना चाहता है)।

namespace ExtensionMethods 
    { 
     //static class 
     public static class MyExtensions 
     { 
      //static method with the first parameter being the object you are extending 
      //the return type being the type you are extending 
      public static List<int> Swap(this List<int> list, 
       int firstIndex, 
       int secondIndex) 

      { 
       int temp = list[firstIndex]; 
       list[firstIndex] = list[secondIndex]; 
       list[secondIndex] = temp; 

       return list; 
      } 
     } 
    } 
संबंधित मुद्दे