functional non-destructive array sort
Apart for the native way of cloning an array and then sorting it in place, is there an algorithm and existing implementation that is more suited for non-destructive sorting?
Need to sort an array of floats into a new array without changing the source. My search results were rather thin since most of the literature is focused on reducing the memory requirements with in-place sorting.
Using the native sorted = [].slice().sort()
works fine. This question is about understanding if there are other performant sorting implementations when memory constraints are removed since a new array is needed anyway.
There's a simpler syntax for immutably sorting an array using ES6 spread operator:
[...array].sort(sortFn)
As the comments have repeated a few times:
-
shuffledArray.slice().sort()
is the default way to go. - It's not really clear how we could have a better algorithm / method using the libraries your mentioned.
Seeing as the motivation for non-destructive sorting is related to writing functional code, and you're looking at Ramda...check out Facebook's ImmutableJS library if you haven't already.
Particularly, the Seq
.
You could start storing your array of floats in a Seq
, sort it, and be sure the original Seq remains in the right order.
In addition, it utilizes Lazy evaluation.
http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy