Имеет список списков одинакового размера, например:
(def d [["A" "B"] ["A" "C"] ["H" "M"]])
Как его можно преобразовать в список наборов, каждый набор для индексов выше:
[#{"A" "H"} #{"B" "C" "M"}]
(map set (apply map vector d))
"(apply map vector)" - это то, что называется "zip" в других языках, таких как Python.Он вызывает vector для первого элемента каждого элемента d, затем для второго элемента каждого элемента и т. Д.
(apply map vector)
vector
d
Затем мы вызываем set для каждой из этих коллекций.
set
, если хеш-набор допускает дублирование ключей, вы можете использовать:
(apply map hash-set d)
, вместо этого вы можете сделать более гадкий
(apply map (fn [& s] (set s)) d)
Я бы предложил следующее:
(reduce (fn [sets vals] (map conj sets vals)) (map hash-set (first d)) (rest d))