2009-07-10 16 views
8

Ich habe diese ListeSwap-Liste <> Elemente mit C# mit LINQ

var list = neue Liste {3, 1, 0, 5};

Ich möchte tauschen Element 0 mit 2

Ausgang 0, 1, 3, 5

+0

Mögliche Duplikat [Swap zwei Elemente in List ] (http://stackoverflow.com/questions/2094239/swap-two-items-in-listt) – QuarK

Antwort

16

Wenn Sie nur sortiert haben möchten, würde ich List.Sort() verwenden.

Wenn Sie tauschen möchten, gibt es keine eingebaute Methode, dies zu tun. Es wäre einfach, eine Erweiterungsmethode zu schreiben, aber:

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

Sie könnten dann tun:

list.Swap(0,2); 
+0

Sie schlagen mich! Ich würde immer noch ein IEnumerable zurückgeben. –

+2

Sie können nicht auf einen IEnumerable nach Index zugreifen, damit Ihre Methode nicht funktioniert. Sie könnten ein IEnumerable-Objekt zurückgeben, das jedoch möglicherweise unerwartet ist, es sei denn, Sie haben eine Kopie erstellt, da Sie die geänderte Objektgruppe zurückgeben. Das Erstellen einer Kopie würde zusätzlichen Aufwand verursachen. –

+0

Sie können auf einen IEnumerable nach Index zugreifen, indem Sie Enumerable.ElementAt verwenden. –

2

Klassische Swap ist ...


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

Ich glaube nicht, Linq jeder hat "swap" -Funktionalität, wenn Sie das suchen.

1

In dem Fall, dass etwas nicht direkt unterstützt ... machen es so die Nummer 1!

Werfen Sie einen Blick auf das Konzept von "extension methods". Damit können Sie Ihre Liste leicht mit dem Konzept von Swap() unterstützen (dies gilt immer dann, wenn Sie die Funktionalität einer Klasse erweitern möchten).

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; 
      } 
     } 
    } 
Verwandte Themen