2009-07-10 7 views

Répondre

16

Si vous voulez juste trié, j'utiliserais List.Sort().

Si vous voulez échanger, il n'y a pas de méthode intégrée pour cela. Il serait facile d'écrire une méthode d'extension, si:

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

Vous pouvez alors faire:

list.Swap(0,2); 
+0

Vous me battre! Je retournerais toujours un IEnumerable. –

+2

Vous ne pouvez pas accéder à IEnumerable par index, donc votre méthode ne fonctionnerait pas. Vous pourriez retourner un IEnumerable, mais ce serait un comportement potentiellement inattendu à moins que vous ne construisiez une copie, puisque vous retourneriez la collection modifiée. Construire une copie ajouterait un surcoût. –

+0

Vous pouvez accéder à un IEnumerable par index en utilisant Enumerable.ElementAt. –

2

Swap Classic est ...


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

Je ne pense pas Linq a tout "swap" fonctionnalité si c'est ce que vous cherchez.

1

Dans le cas où quelque chose est pas pris en charge ... faire directement si le numéro 1! Regardez le concept "extension methods". Avec ceci, vous pouvez facilement faire en sorte que votre liste prenne en charge le concept de Swap() (cela s'applique à chaque fois que vous voulez étendre les fonctionnalités d'une classe).

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