Функциональная неразрушающая сортировка массива
Помимо собственного способа клонирования массива и последующего его сортировки, существует ли алгоритм и существующая реализация, более подходящая для неразрушающей сортировки?
Нужно сортировать массив поплавков в новый массив без изменения источника. Мои результаты поиска были довольно тонкими, так как большая часть литературы сосредоточена на сокращении потребностей в памяти с помощью сортировки на месте.
Использование native sorted = [].slice().sort()
отлично работает. Этот вопрос заключается в понимании того, существуют ли другие реализации сортировки исполнителей, когда ограничения памяти удаляются, так как в любом случае необходим новый массив.
Ответы
Ответ 1
Поскольку комментарии повторялись несколько раз:
- .slice(). sort() - это способ по умолчанию.
- Не совсем понятно, как мы могли бы использовать лучший алгоритм/метод, используя библиотеки, которые вы упомянули.
Увидев, что мотивация неразрушающей сортировки связана с написанием функционального кода, и вы смотрите на Ramda... проверьте библиотеку Facebook ImmutableJS, если вы еще этого не сделали.
В частности, Seq
.
Вы можете начать хранить свой массив поплавков в Seq
, отсортировать его и убедиться, что исходный Seq остается в правильном порядке.
Кроме того, он использует ленивую оценку.
http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy
Ответ 2
Там более простой синтаксис для неизменно сортировки массива с использованием оператора распространения ES6:
[...array].sort(sortFn)