Comment trier un IEnumerable<string>
Comment puis-je trier un IEnumerable<string>
par ordre alphabétique. Est-ce possible?
Edit: Comment j'écris une solution?
Vous devez vous connecter pour publier un commentaire.
Comment puis-je trier un IEnumerable<string>
par ordre alphabétique. Est-ce possible?
Edit: Comment j'écris une solution?
Vous devez vous connecter pour publier un commentaire.
La même manière que vous le feriez tout autre énumérable:
ou
ou (ignorant la casse)
Noter que, comme d'habitude avec LINQ, cela crée un nouveau IEnumerable<T> qui, lorsque énumérés, renvoie les éléments de l'original IEnumerable<T> dans l'ordre de tri. Il ne permet pas de trier les IEnumerable<T> en place.
Un IEnumerable<T> est en lecture seule, ce qui est, vous ne pouvez récupérer les éléments, mais ne peut pas le modifier directement. Si vous souhaitez trier une collection de chaînes en place, vous avez besoin de trier la collection originale qui implémente l'interface IEnumerable<string>, ou tourner un IEnumerable<string> dans un sortable collection:
Basé sur votre commentaire:
ou
ou (si vous voulez la suite ajouter d'autres éléments à la liste et de le garder triés)
OrderBy
retourneIOrderedEnumerable<T>
.IOrderedEnumerable<T>
dérive deIEnumerable<T>
de sorte qu'il peut être utilisé commeIEnumerable<T>
, mais elle s'étend le type, permettant par exemple, pour l'utilisation deThenBy
.C'est impossible, mais il ne l'est pas.
Fondamentalement, toute la méthode de tri est d'aller à la copie de vos
IEnumerable
dans unList
, trier lesList
et puis de retour pour vous la liste triée, qui est unIEnumerable
ainsi que d'uneIList
.Cela signifie que vous perdez de l' "continuer à l'infini" propriété d'un
IEnumerable
, mais alors vous ne pouvez pas trier un comme ça de toute façon.On ne peut pas toujours le faire sur place, mais nous détecter quand c'est possible:
Il utilise le handy struct:
listToSort = (src is List<T>) ? (List<T>)src : new List<T>(src);
? Ce sujet ayant commelistToSort = (src as List<T>); if (null == listToSort) listToSort = new List<T>(src);