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. 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