Comment pouvez-vous inverser de parcourir à travers un C# collection?
Est-il possible d'avoir un foreach
déclaration qui va de parcourir à travers une des Collections d'objets dans l'ordre inverse?
Si ce n'est un foreach
déclaration, est-il une autre voie?
Terrés dans les commentaires et réponses dans ce thread. Reverse() est pas un substitut pour une boucle for (), on a O(n) les conditions de stockage. Le LINQ boîte noire peut être dangereux.
Mal.
où? Je ne la vois pas.
Je retire ce que; il ne l'est pas. Je me demande pourquoi.
Mal.
Reverse
utilisera IList
si disponible.où? Je ne la vois pas.
Je retire ce que; il ne l'est pas. Je me demande pourquoi.
OriginalL'auteur Sam F | 2010-06-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une normale
for
boucle vers l'arrière, comme ceci:Vous pouvez également utiliser LINQ:
Toutefois, la normale
for
boucle sera probablement un peu plus vite.for
boucle peut être plus rapide, mais le LINQ est certainement plus clair. Je préfère donc le LINQ version.F. Non, vous n'êtes pas! 🙂
L'itération en arrière dans une boucle for est en quelque sorte le "manque de clarté"? Vraiment?
Ce nom d'utilisateur est le génie. J'adore le fait que tout le monde sera d'adresse à vous comme "Hey, moron"
Dans cet âge de itérateurs et LINQ, pour les boucles semblent carrément désuet.
OriginalL'auteur SLaks
Vous pourrait simplement appeler Inverse() sur la collection.
F: C'est un méthode d'extension sur n'importe quel
IEnumerable<T>
(qui comprendCollection<T>
), disponible à partir de .NET 3.5 à partir. Voir ici pour une liste de tous les d'entre eux. Si vous êtes en utilisant .NET 3.5 ou ultérieure, vous avez juste besoin d'ajouterusing System.Linq;
vers le haut de votre fichier.Je suppose que je devrais ajouter un point de prêter à confusion assez, Reverse() a une signification différente pour IList<T> qu'il n'en faut pour le standard IEnumerable<T>. IList<T>.Reverse() retourne void donc, pour mon extrait de travailler, vous auriez à dire de la collection.AsEnumerable().Reverse(). Confusion d'affaires, que.
48klocs, pouvez-vous mettre le commentaire réponse dans la vraie réponse....? (le AsEnumerable()). J'ai presque abandonné sur la posté-réponse avant que j'ai lu la magie commentaire.
OriginalL'auteur 48klocs
Si vous utilisez 3.5, on dirait qu'il y a une méthode Reverse() dans LINQ
Pour ne pas les parcourir dans l'ordre inverse, mais permettrait d'inverser l'ensemble de la liste, alors vous pourriez faire votre foreach.
Ou vous pouvez utiliser une simple déclaration d':
IndexOutOfBounds
erreur. Commencer ài = count - 1
"Pour ne pas les parcourir dans l'ordre inverse, mais aurait pour effet d'inverser l'ensemble de la liste." Ce qui est inexact. L'itération dans l'ordre inverse est précisément ce que les
Enumerable.Reverse<T>
méthode d'extension. Vous pensez peut-être deList<T>.Reverse
, point de prêter à confusion avec le même nom.bonne prise, mise à jour. @Dan Tao, je pensais à une Liste<T>.Inverse.
ouais j'ai remarqué qu'après il s'est écrasé merci 😛
OriginalL'auteur taylonr
Sinon, si la collection est un IEnumerable et donc sans accès aléatoire, l'utilisation du Système.Linq IEnumerable.Méthode Reverse() et appliquer forearch comme d'habitude.
OriginalL'auteur Kyte
Extension de réactif .NET 3.5/4.0
OriginalL'auteur Kyaw Thurein