Trier un tableau int avec orderby
Je voudrais faire le tri dans mes int tableau dans l'ordre croissant.
j'ai d'abord faire une copie de mon tableau:
int[] copyArray = myArray.ToArray();
Ensuite, je voudrais faire le tri dans l'ordre croissant comme ceci:
int[] sortedCopy = from element in copyArray
orderby element ascending select element;
Mais j'obtiens un message d'erreur "sélectionné" obtient highligted et l'erreur est:
"impossible de convertir implicitement le type de système.linq.iorderedenumerable' int[]'"
source d'informationauteur user1635406
Vous devez vous connecter pour publier un commentaire.
Vous devez appeler
ToArray()
à la fin de réellement convertir la séquence ordonnée dans un tableau. LINQ utilise évaluation différéece qui signifie que jusqu'à ce que vous appelezToArray()
ToList()
ou une autre méthode similaire, le traitement intermédiaire (dans ce cas, le tri) ne sera pas effectuée.Cela va déjà faire une copie des éléments, de sorte que vous n'avez pas besoin de créer votre propre copie de la première.
Exemple:
Il serait peut-être préférable de l'écrire cela dans la syntaxe de l'expression:
Remarque: si vous n'avez pas besoin d'une copie (c'est à dire qu'il est acceptable de changer
myArray
), puis beaucoup plus simple et plus efficace de l'approche est juste:Ce n'est une sorte de tableau, en exploitant le fait que c'est un tableau pour être aussi efficace que possible.
Pour des scénarios plus complexes (par exemple, un membre de la sage-tri d'un objet-tableau), vous pouvez faire des choses comme:
c'est la morale-l'équivalent de:
mais encore une fois: faire le tri en place.
Nous ne savons pas ce que vous faites à côté, mais peut-être que vous n'avez pas besoin d'un tableau. Si il va dans un autre linq déclaration, ou foreach, puis il suffit de la garder comme elle est, plus simplement en utilisant
var
.Cela permet de linq pour être aussi paresseux que possible. Si vous avez toujours fonte
ToArray
ouToList
alors il n'a pas le choix que de les évaluer, et allouer de la mémoire pour le résultat.