2016-02-18 1 views
2

Чтобы отсортировать вектор в ClojureClojure рода всегда возвращает список

(sort [ 2 3 1 4]) 

возвращает список (отсортированный)

(1 2 3 4) 

Я могу превратить его обратно в вектор с помощью

(into [] (sort [ 2 3 1 4])) 

, который является своего рода неудобным.

Но если сортировать карты/словарь в Clojure

(sort {2 "" 3 "" 1 "" 4 ""}) 

возвращение

([1 ""] [2 ""] [3 ""] [4 ""]) 

Как превратить его обратно в отсортированные карты? Или есть лучшая функция сортировки, которая сохраняет тип/форму ввода?

+1

См http://stackoverflow.com/questions/1528632/how-do-you-use-sorted-map-by-in-clojure –

+0

не боян , но http://stackoverflow.com/q/1989301/599075 указывает, что нет отличного способа – Andbdrew

+0

Я собирался опубликовать ответ с участием ['empty'] (http://clojuredocs.org/clojure.core/empty) и ['to'] (http://clojuredocs.org/clojure.core/into), но оказалось, что это намного менее полезно, чем я ожидал. –

ответ

3

Я не знаю общего способа всегда сохранять оригинальный тип/форму.

В случае сортировки карты важно знать, что обычная карта в clojure не имеет порядка (по крайней мере, вы не можете или должны полагаться). Для этого clojure есть sorted-map. Существует также полезная функция sorted-map-by, которая позволяет вам указать свой заказ.

Таким образом, в вашем примере:

(into (sorted-map) {2 "" 3 "" 1 "" 4 ""}) 
;; {1 "", 2 "", 3 "", 4 ""} 
Смежные вопросы