2009-07-10 16 views

Odpowiedz

16

Jeśli chcesz go posortować, użyłbym List.Sort().

Jeśli chcesz zamienić, nie ma wbudowanej metody, aby to zrobić. Byłoby łatwo napisać metodę rozszerzenia, choć:

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

Można wtedy zrobić:

list.Swap(0,2); 
+0

mnie pokonać! Wciąż zwrócę IEnumerable. –

+2

Nie można uzyskać dostępu do IEnumerable według indeksu, więc twoja metoda nie zadziałałaby. Możesz zwrócić wartość IEnumerable, ale będzie to potencjalnie nieoczekiwane zachowanie, chyba że skonstruujesz kopię, ponieważ zwrócisz zmodyfikowaną kolekcję. Zbudowanie kopii zwiększyłoby obciążenie. –

+0

Możesz uzyskać dostęp do IEnumerable według indeksu za pomocą Enumerable.ElementAt. –

2

klasyczny wymiany jest ...


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

Nie sądzę LINQ ma jakikolwiek funkcja "zamień", jeśli tego szukasz.

1

W przypadku, że coś nie jest bezpośrednio obsługiwany ... sprawiają, że tak numer 1!

Spójrz na pojęcie "extension methods". Dzięki temu możesz z łatwością sprawić, by twoja lista obsługiwała koncepcję Swap() (dotyczy to każdej chwili, kiedy chcesz rozszerzyć funkcjonalność klasy).

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; 
      } 
     } 
    } 
Powiązane problemy