web-dev-qa-db-fra.com

tri fonctionnel non destructif

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.

46
Hurelu

Il existe une syntaxe plus simple pour trier immuablement un tableau à l'aide de l'opérateur d'étalement ES6:

[...array].sort(sortFn)
44
shuaibird

Comme les commentaires l'ont répété à plusieurs reprises:

  1. shuffledArray.slice().sort() est le chemin par défaut.
  2. On ne sait pas vraiment comment nous pourrions avoir un meilleur algorithme/méthode en utilisant les bibliothèques que vous avez mentionnées.

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

41