7
votes

Array.Reverse () Versus Enumérable.Revable ()

J'ai un tableau unique d'éléments déclarés et initialisés comme suit: xxx

Je voudrais inverser les membres et trouvé énumérable.Reverse () .

Quels avantages, le cas échéant , la mise en œuvre de Linq d'inverse a-t-elle over array.Reverse () ?


0 commentaires

3 Réponses :


6
votes

system.linq.enumerable.Reverse () fonctionne sur toutes les classes qui implémentent ienumerable où comme système.array.Reverse () seulement fonctionne sur des tableaux. Si vous savez que vous avez un tableau, il n'y a rien de mal à utiliser system.array.arrever () .


2 commentaires

Non seulement il n'y a rien de mal à cela, mais cela a probablement une meilleure performance ...


@THOMAS: Si le résultat doit être un tableau au lieu d'un ienumerable : convenu.



12
votes

à côté de ce que Daniel a dit system.linq.enumerable.Reverse () crée réellement une copie puis iterate it iterate de fin au début, lorsque système.array.rray.Rray.Reverse (code> fait en place la transformation.


2 commentaires

Remarques sur MSDN ( MSDN.MicRosoft.com/en-us/Library/BB358497. ASPX ): "Cette méthode est mise en œuvre à l'aide d'une exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations nécessaires à l'action ..." "Cette méthode de tri ne considère pas les valeurs réelles eux-mêmes pour déterminer l'ordre. Au lieu de cela, cela renvoie simplement les éléments de l'ordre inverse à partir desquels ils sont produits par la source sous-jacente. " Une manière compliquée de dire ce que vous avez commenté, je pense ... :) Merci!


@MBroNnycyc Eh bien, MSDN ne stipule pas explicitement que ienumerable.Reverse crée une copie, car il n'est pas strictement nécessaire pour les tableaux. Je l'ai trouvé en décompilant les assemblées.



0
votes

Si la performance vous importe, utilisez array.Reverse () . system.linq.enumerable.Reverse () a l'avantage de travailler sur chaque iNeumable comme des tableaux, des listes et ainsi de suite.


0 commentaires