2012-04-18 9 views
80

Ich habe diese Liste:Wie kann ich eine Liste <string> bestellen?

IList<string> ListaServizi = new List<string>() { }; 

wie kann ich es bestellen aufgrund der Saiten im Inneren? Alphabetisch und aufsteigend.

+3

Haben Sie versucht, '.Sort' http://msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs. 90% 29.aspx? – Matthew

+0

Sortiermethode; in Kombination mit Reverse, wenn Sie auch absteigend benötigen –

+0

Schauen Sie hier http://www.dotnetperls.com/sort-list –

Antwort

155
ListaServizi = ListaServizi.OrderBy(q => q).ToList(); 
+0

@Servy ein Grund, OrderBy zu verwenden wäre, dass ListaServizi keine Sort-Methode hat, weil es als IList deklariert ist '. Dieser Code würde tatsächlich wie geschrieben funktionieren, anders als die Antworten, die mehr Upvotes mit "ListaServizi.Sort()" erhielten. Ich sage nicht, dass dies die Lösung ist, die ich wählen würde, aber das war eigentlich die einzig richtige Antwort, als ich meine Antwort gepostet habe. – phoog

+0

Wenn es nicht die Lösung ist, die Sie wählen würden, warum schlagen Sie sie als Antwort vor? Schlage vor, was du als Antwort tun würdest; Wenn das bedeutet, den Typ von IList zu List zu ändern, damit Sie '.Sort' darauf aufrufen können, warum tun Sie das nicht. – Servy

+1

@Servy Er löste das Problem, ohne die Problemspezifikation zu ändern. Das ist bei weitem der bevorzugte Weg. Darüber hinaus verwendet die Problembeschreibung das Interface-über-Implementierungsmuster, was sehr wichtig ist. Das Vorschlagen der Änderung zum List-Typ ist richtig, sollte aber als alternative Antwort nach der richtigen durchgeführt werden, da dies eine Änderung des Problems erfordert. –

31

können Sie Sort

List<string> ListaServizi = new List<string>() { }; 
ListaServizi.Sort(); 
4
ListaServizi.Sort(); 

, die für Sie tun verwenden. Es ist einfach genug mit einer Liste von Strings. Sie müssen ein wenig cleverer sein, wenn Sie Objekte sortieren.

+1

'ListaServizi' ist' IList '; Die Schnittstelle hat keine Sort-Methode. Du brauchst hier wenigstens eine Besetzung. – phoog

7

Andere Antworten sind korrekt, um Sort vorzuschlagen, aber sie scheinen die Tatsache verpasst zu haben, dass der Speicherort als IList<string eingegeben wird. Sort ist nicht Teil der Schnittstelle. Wenn Sie wissen, dass ListaServizi immer eine List<string> enthält, können Sie entweder den deklarierten Typ ändern oder eine Umwandlung verwenden. Wenn Sie nicht sicher sind, können Sie die Art testen:

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

Vielleicht mehr idiomatische:

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 ListaServizi wird manchmal eine andere Implementierung von IList<string> halten, lassen Sie einen Kommentar, und Ich werde ein oder zwei Vorschläge hinzufügen, um es zu sortieren.

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

Ausgang: Abdi 3 Alex 2 Bob 4

Verwandte Themen