Jak mogę zamówić List <string>?

Odpowiedzi:

238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
daryal
źródło
@Servy Jednym z powodów użycia OrderBy byłoby to, że ListaServizi nie ma metody Sort, ponieważ jest zadeklarowana jako IList<string>. Ten kod działałby tak, jak napisano, w przeciwieństwie do odpowiedzi, które otrzymały więcej głosów za ListaServizi.Sort(). Nie mówię, że to jest rozwiązanie, które wybrałem, ale w rzeczywistości była to jedyna poprawna odpowiedź, kiedy opublikowałem swoją odpowiedź.
phoog
Jeśli nie jest to rozwiązanie, które byś wybrał, to po co proponować je jako odpowiedź? Zaproponuj, co byś zrobił jako odpowiedź; jeśli to oznacza zmianę typu z IList na List, abyś mógł go wywołać .Sort, to dlaczego tego nie zrobić.
Servy
1
@Servy Rozwiązał problem bez zmiany specyfikacji problemu. To zdecydowanie preferowany sposób. Co więcej, opis problemu używa interfejsu zamiast wzorca implementacji, co jest bardzo ważne. Zaproponowanie zmiany typu Lista jest poprawne, ale powinno być dokonane jako odpowiedź alternatywna po poprawnej, ponieważ wymaga zmiany problemu.
Aurelien Ribon
1
@ AurélienRibon Nic w opisie problemu nie mówi, że nie można zmienić typu zmiennej. Wymagania są bardzo szczegółowe, aby posortować plik List. Koszt związany z tą odpowiedzią jest nietrywialny, a także niepotrzebny. Dosłownie nic nie zyskuje . Dodaje złożoności do kodu, jest mniej zwięzły, mniej wydajny, nie ma tu dosłownie nic oprócz wad.
Servy
45

Możesz użyć Sortuj

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();
Richard Dalton
źródło
12

Inne odpowiedzi są poprawne Sort, ale wydaje się, że przeoczyły one fakt, że miejsce przechowywania jest wpisane jako IList<string. Sortnie jest częścią interfejsu.

Jeśli wiesz, że ListaServizizawsze będzie zawierał a List<string>, możesz zmienić jego zadeklarowany typ lub użyć rzutowania. Jeśli nie masz pewności, możesz przetestować typ:

if (typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))
    ((List<string>)ListaServizi).Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Być może bardziej idiomatyczne:

List<string> typeCheck = ListaServizi as List<string>;
if (typeCheck != null)
    typeCheck.Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Jeśli wiesz, że ListaServiziczasami będzie to zawierać inną implementację IList<string>, zostaw komentarz, a ja dodam sugestię lub dwie dotyczące sortowania.

phoog
źródło
5
ListaServizi.Sort();

Zrobię to za Ciebie. Jest to dość proste dzięki liście ciągów. Przy sortowaniu obiektów musisz być trochę sprytniejszy.

Ste
źródło
3
ListaServizijest IList<string>; interfejs nie ma Sortmetody. Przynajmniej potrzebujesz tutaj obsady.
phoog
3
List<string> myCollection = new List<string>()
{
    "Bob", "Bob","Alex", "Abdi", "Abdi", "Bob", "Alex", "Bob","Abdi"
};

myCollection.Sort();
foreach (var name in myCollection.Distinct())
{
    Console.WriteLine(name + " " + myCollection.Count(x=> x == name));
}

wyjście: Abdi 3 Alex 2 Bob 4

Abdi
źródło