Come posso ordinare una lista <string>?


Risposte:


238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

@Servy uno dei motivi per utilizzare OrderBy sarebbe che ListaServizi non ha un metodo Sort perché è dichiarato come IList<string>. Questo codice funzionerebbe effettivamente come scritto, a differenza delle risposte che hanno ricevuto più voti positivi con ListaServizi.Sort(). Non sto dicendo che questa sia la soluzione che sceglierei, ma questa era in realtà l'unica risposta corretta quando ho pubblicato la mia risposta.
phoog

Se non è la soluzione che sceglieresti allora perché proporla come risposta? Proponi cosa faresti come risposta; se questo significa cambiare il tipo da IList a List in modo da poterlo richiamare .Sort, allora perché non farlo.
Servy

1
@Servy Ha risolto il problema senza modificare le specifiche del problema. Questo è di gran lunga il modo preferito. Inoltre, l'istruzione del problema utilizza l'interfaccia sul modello di implementazione, il che è molto importante. Proporre la modifica al tipo di Elenco è corretto, ma dovrebbe essere fatto come una risposta alternativa, dopo quella corretta, perché richiede di cambiare il problema.
Aurelien Ribon

1
@ AurélienRibon Nulla dell'istruzione del problema dice che il tipo di variabile non può essere modificato. I requisiti sono molto specifici per ordinare un file List. E il costo associato a questa risposta non è banale e anche inutile. Non guadagna letteralmente nulla . Aggiunge complessità al codice, è meno conciso, è meno efficiente, non ci sono letteralmente nient'altro che svantaggi qui.
Servy


12

Altre risposte sono corrette da suggerire Sort, ma sembra che abbiano trascurato il fatto che la posizione di archiviazione sia stata digitata come IList<string. Sortnon fa parte dell'interfaccia.

Se sai che ListaServiziconterrà sempre un List<string>, puoi cambiare il suo tipo dichiarato o usare un cast. Se non sei sicuro, puoi testare il tipo:

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

Forse più idiomatico:

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

Se sai che ListaServizia volte conterrà un'implementazione diversa di IList<string>, lascia un commento e aggiungerò uno o due suggerimenti per ordinarlo.


5
ListaServizi.Sort();

Lo farà per te. È abbastanza semplice con un elenco di stringhe. Devi essere un po 'più intelligente se ordini gli oggetti.


3
ListaServiziè IList<string>; l'interfaccia non ha un Sortmetodo. Hai almeno bisogno di un cast qui.
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));
}

uscita: Abdi 3 Alex 2 Bob 4

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.