Я пытаюсь сортировать карту по значениям.Clojure сортировать карту по значению
вход-карта выглядит следующим образом:
{:Blabla 1, :foo 1, :bla-bla 1, :Bla 2, :bla/bla 1, :bla 4, :blub 2, :hello 1, :Foo 2}
Вывод должен выглядеть следующим образом:
{:bla 4 :Bla 2 :blub 2 :Foo 2 :Blabla 1 :bla-bla 1 :bla/bla 1 :foo 1 :hello 1}
Я отсортирован карта-мимо, как в документации здесь: http://clojuredocs.org/clojure.core/sorted-map-by
(defn sort-keyword-list [texts]
(let [results (word-counts texts)]
;results is now {:Blabla 1, :foo 1, :bla-bla 1, :Bla 2, :bla/bla 1, :bla 4, :blub 2, :hello 1, :Foo 2}
(into (sorted-map-by (fn [key1 key2]
(compare [(get results key2) key2]
[(get results key1) key1])))
results))
)
Ну, я узнал, что это решение работает только в том случае, если keywo У rds нет специальных символов, таких как «/» или «-» внутри. Это известная ошибка?
Итак, как я могу сортировать карту по значениям быстро, не создавая собственный алгоритм медленного сортировки?
Я хочу сортировать значения в первом порядке, чем, возможно, над ключами. – Kingalione
Я не уверен, что понимаю вашу цель. Ваш код уже создает карту, сортирующую по значению. Если вы не хотите сортировать ключи, у вас уже есть рабочий код. Если вы хотите отсортировать ключи для устранения неоднозначности записей с одинаковым значением, вы, вероятно, захотите сначала сжать ключи. – user100464
В моем REPL он не сортирует карту над значениями. Выходной и входной то же самое – Kingalione