Mis à part la façon native de cloner un tableau puis de le trier en place, existe-t-il un algorithme et une implémentation existante qui conviennent mieux au tri non destructif?
Besoin de trier un tableau de flottants dans un nouveau tableau sans changer la source. Mes résultats de recherche étaient plutôt minces car la plupart de la littérature se concentre sur la réduction des besoins en mémoire avec le tri sur place.
L'utilisation de la fonction native sorted = [].slice().sort()
fonctionne correctement. Cette question consiste à comprendre s'il existe d'autres implémentations de tri performantes lorsque les contraintes de mémoire sont supprimées puisqu'un nouveau tableau est de toute façon nécessaire.
Il existe une syntaxe plus simple pour trier immuablement un tableau à l'aide de l'opérateur d'étalement ES6:
[...array].sort(sortFn)
Comme les commentaires l'ont répété à plusieurs reprises:
shuffledArray.slice().sort()
est le chemin par défaut.La motivation du tri non destructif étant liée à l'écriture de code fonctionnel, et vous regardez Ramda ... consultez la bibliothèque ImmutableJS de Facebook si vous ne l'avez pas déjà fait.
En particulier, le Seq
. Vous pouvez commencer à stocker votre tableau de flottants dans un Seq
, le trier et être sûr que la séquence d'origine reste dans le bon ordre. De plus, il utilise l'évaluation paresseuse. http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy