Wie kann ich eine Liste <string> bestellen?

Antworten:

235
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
Daryal
quelle
@Servy Ein Grund für die Verwendung von OrderBy wäre, dass ListaServizi keine Sortiermethode hat, da diese als deklariert ist IList<string>. Dieser Code würde tatsächlich wie geschrieben funktionieren, im Gegensatz zu den Antworten, mit denen mehr positive Stimmen erhalten wurden ListaServizi.Sort(). Ich sage nicht, dass dies die Lösung ist, die ich wählen würde, aber dies war tatsächlich die einzig richtige Antwort, als ich meine Antwort veröffentlichte.
Phoog
Wenn es nicht die Lösung ist, die Sie wählen würden, warum sollten Sie sie dann als Antwort vorschlagen? Schlagen Sie vor, was Sie als Antwort tun würden. Wenn dies bedeutet, dass der Typ von IList in List geändert wird, damit Sie ihn aufrufen .Sortkönnen, warum nicht ?
Servy
1
@Servy Er hat das Problem gelöst, ohne die Problemspezifikation zu ändern. Das ist bei weitem der bevorzugte Weg. Darüber hinaus verwendet die Problemstellung das Schnittstellen-über-Implementierungsmuster, was sehr wichtig ist. Das Vorschlagen der Änderung des Listentyps ist korrekt, sollte jedoch als alternative Antwort nach der richtigen Antwort erfolgen, da das Problem geändert werden muss.
Aurelien Ribon
1
@ AurélienRibon Nichts an der Problemstellung besagt, dass der Typ der Variablen nicht geändert werden kann. Die Anforderungen sind sehr spezifisch zu sortieren List. Und die mit dieser Antwort verbundenen Kosten sind nicht trivial und auch unnötig. Es gewinnt buchstäblich nichts . Es erhöht die Komplexität des Codes, ist weniger präzise, ​​weniger effizient und bietet hier buchstäblich nur Nachteile.
Servy
44

Sie können Sortieren verwenden

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();
Richard Dalton
quelle
12

Andere Antworten sind richtig Sort, aber sie scheinen die Tatsache übersehen zu haben, dass der Speicherort als eingegeben ist IList<string. Sortist nicht Teil der Schnittstelle.

Wenn Sie wissen, dass dies ListaServiziimmer ein enthält List<string>, können Sie entweder den deklarierten Typ ändern oder eine Besetzung verwenden. Wenn Sie sich nicht sicher sind, können Sie den Typ testen:

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

Vielleicht idiomatischer:

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

Wenn Sie wissen, dass dies ListaServizimanchmal eine andere Implementierung von enthält IList<string>, hinterlassen Sie einen Kommentar, und ich füge ein oder zwei Vorschläge zum Sortieren hinzu.

Phoog
quelle
5
ListaServizi.Sort();

Werde das für dich tun. Es ist einfach genug mit einer Liste von Zeichenfolgen. Sie müssen etwas schlauer sein, wenn Sie Objekte sortieren.

Ste
quelle
3
ListaServiziist IList<string>; Die Schnittstelle hat keine SortMethode. Du brauchst hier wenigstens eine Besetzung.
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));
}

Ausgabe: Abdi 3 Alex 2 Bob 4

Abdi
quelle