Comment puis-je commander une liste <string>?

Réponses:

238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
daryal
la source
@Servy une des raisons d'utiliser OrderBy serait que ListaServizi n'a pas de méthode Sort car elle est déclarée comme IList<string>. Ce code fonctionnerait en fait comme écrit, contrairement aux réponses qui ont reçu plus de votes positifs avec ListaServizi.Sort(). Je ne dis pas que c'est la solution que je choisirais, mais c'était en fait la seule bonne réponse lorsque j'ai publié ma réponse.
phoog
Si ce n'est pas la solution que vous choisiriez, pourquoi la proposer comme réponse? Proposez ce que vous feriez comme réponse; si cela signifie changer le type de IList en List afin que vous puissiez l'appeler .Sort, alors pourquoi ne pas le faire.
Servy
1
@Servy Il a résolu le problème sans changer la spécification du problème. C'est de loin la méthode préférée. De plus, l'énoncé du problème utilise l'interface sur le modèle d'implémentation, ce qui est très important. Proposer le changement de type Liste est correct, mais doit être fait comme une réponse alternative, après la bonne, car cela nécessite de changer le problème.
Aurelien Ribon
1
@ AurélienRibon Rien dans l'énoncé du problème ne dit que le type de la variable ne peut pas être changé. Les exigences sont très spécifiques pour trier un fichier List. Et le coût associé à cette réponse est non négligeable et également inutile. Il ne gagne littéralement rien . Cela ajoute de la complexité au code, c'est moins concis, c'est moins efficace, il n'y a littéralement que des inconvénients ici.
Servy
45

Vous pouvez utiliser Trier

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

D'autres réponses sont correctes à suggérer Sort, mais elles semblent avoir manqué le fait que l'emplacement de stockage est tapé comme IList<string. Sortne fait pas partie de l'interface.

Si vous savez qu'il ListaServizicontiendra toujours un List<string>, vous pouvez soit changer son type déclaré, soit utiliser un cast. Si vous n'êtes pas sûr, vous pouvez tester le type:

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

Peut-être plus idiomatique:

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

Si vous savez que cela ListaServizicontiendra parfois une implémentation différente de IList<string>, laissez un commentaire et j'ajouterai une suggestion ou deux pour le trier.

phoog
la source
5
ListaServizi.Sort();

Fera ça pour vous. C'est assez simple avec une liste de chaînes. Vous devez être un peu plus intelligent si vous triez des objets.

Ste
la source
3
ListaServiziest IList<string>; l'interface n'a pas de Sortméthode. Vous avez au moins besoin d'un casting ici.
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));
}

sortie: Abdi 3 Alex 2 Bob 4

Abdi
la source