Как Вы используете sorted-map-by для сортировки карты по значению?

Я думаю, что основной проблемой, с которой Вы собираетесь быть сталкивающимися, является тестируемость Вашего gui приложения.

Так относительно пригодности для обслуживания и простоты поблочного тестирования я склоняюсь к "Предъявителю сначала" идиома вместо Образцового контроллера представления (MVC) и других производных, которые дают Вам команду иметь знание представления логики реального приложения (Модель). Лучший ресурс веб-сайт из группы, которая представила его как мысль.

Начиная с использования подхода как этот собирается взять много шаблонного кода для инициализации различных элементов приложения, которое я также предложил бы в использовании платформы внедрения зависимости. Я обосновался с Guice.

9
задан glts 24 June 2019 в 15:31
поделиться

2 ответа

Вы используете sorted-map-by, задав сравнение, за которым следуют пары ключ-значение. Компаратор - это функция, которая принимает два ключа и возвращает -1, 0 или 1 в зависимости от того, меньше ли первый ключ, равен или больше второго.

Пример:

user=> (sorted-map-by (fn [k1 k2] (compare (mod k1 10) (mod k2 10))) 10 1 23 4 2 5)
{10 1, 2 5, 23 4}

Поскольку функция сравнения принимает только ключей в качестве аргументов, вы не можете использовать это для сортировки по значениям.

Невозможно получить отсортированную карту, где карта сортируется по значениям. Если бы это было так, было бы невозможно найти запись по ключу, потому что вы не могли бы использовать порядок, чтобы определить, где находится запись (поскольку порядок не зависел бы от ключа).

6
ответ дан 4 December 2019 в 08:52
поделиться

Другой способ - сравнить значения из исходной карты в функции сравнения.

(def my-map {:chad 3 :bob 5 :sammy 4})

;; sort by keys ascending
(into (sorted-map) my-map)
=> {:bob 5, :chad 3, :sammy 4}

;; sort by values ascending
(into (sorted-map-by (fn [key1 key2] (compare (key1 my-map) (key2 my-map)))) my-map)
=> {:chad 3, :sammy 4,  :bob 5}

;; sort by values descending
(into (sorted-map-by (fn [key1 key2] (compare (key2 my-map) (key1 my-map)))) my-map)
=> {:bob 5, :sammy 4, :chad 3}
18
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: