2009-07-10 28 views
8

tengo esta listaList <> elementos con C# utilizando LINQ

lista var = new List {3, 1, 0, 5};

Quiero intercambiar con el elemento 0 2

salida 0, 1, 3, 5

+0

duplicado posible de [Intercambia dos artículos en la lista ] (http://stackoverflow.com/questions/2094239/swap-two-items-in-listt) – QuarK

Respuesta

16

Si solo lo quiere ordenado, usaría List.Sort().

Si desea intercambiar, no hay un método incorporado para hacerlo. Sería fácil escribir un método de extensión, sin embargo:

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

A continuación, podría hacer:

list.Swap(0,2); 
+0

Usted me golpeó! Aún así devolvería un IEnumerable. –

+2

No puede acceder a un IEnumerable por índice, por lo que su método no funcionaría. Podría devolver un IEnumerable, pero sería un comportamiento potencialmente inesperado a menos que construyera una copia, ya que devolvería la colección modificada. Construir una copia agregaría sobrecarga. –

+0

Puede acceder a un IEnumerable por índice usando Enumerable.ElementAt. –

2

de intercambio Classic es ...


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

no creo LINQ tiene ningún Funcionalidad de "intercambio" si eso es lo que estás buscando.

1

En el caso de que algo no está soportado directamente ... que así sea el número 1!

Eche un vistazo al concepto de "extension methods". Con esto puede hacer que su lista respalde fácilmente el concepto de Swap() (esto se aplica a cualquier momento que desee extender la funcionalidad de una clase).

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