Какую функцию я могу поставить как FOO здесь, чтобы дать true в конце? Я играл с хэш-множеством (только правильно для первых 2 значений), conj и concat, но я знаю, что я не обрабатываю одноэлементное условие установки с помощью любого из них.Объединить список карт и объединить значения с наборами в Clojure
(defn mergeMatches [propertyMapList]
"Take a list of maps and merges them combining values into a set"
(reduce #(merge-with FOO %1 %2) {} propertyMapList))
(def in
(list
{:a 1}
{:a 2}
{:a 3}
{:b 4}
{:b 5}
{:b 6}))
(def out
{ :a #{ 1 2 3}
:b #{ 4 5 6} })
; this should return true
(= (mergeMatches in) out)
Какой самый идиоматический способ справиться с этим?
a) из-за ограничения вложенных анонимных функций оно также недопустимо. б) не слишком симпатичный! :) –
Кроме того, я думаю, что это вернет набор карт вместо карты с установленными значениями. –
@Alex: a) Нет такого ограничения. Вы не можете вложить анонимную функцию * литералы * (созданные с помощью '# (...)'), но вы можете вложить анонимные функции (хотя вам нужно использовать 'fn'). б) Вопрос вкуса, я думаю. :-) Кроме того, вы должны попробовать запустить его, так как это происходит, когда функция, которую она производит, действительно заставит ваше тестовое выражение возвращать 'true', если вместо' FOO' вместо 'FOO' в вашем выражении' reduce'. –