подскажите, пожалуйста, как красивее сделать следующую трансформацию: есть два вектора
(def a [{:accent :milky}
{:accent :salmon}
{:accent :bostonBlue}])
(def b [:a :button])
нужно получить
[{:component :a :accent :milky}
{:component :a :accent :salmon}
{:component :a :accent :bostonBlue}
{:component :button :accent :milky}
{:component :button :accent :salmon}
{:component :button :accent :bostonBlue}]
у меня получаются какие монстроидальные конструкции ((for [a1 a b1 b] (assoc a1 :component b1))
@dottedmag - мы-то может где-то и троллим, но я про массы. Вот смотри яркий пример - @ivana. Что за чувак вообще не понятно, что полезного сделал за всю жизнь - тоже. Зато горазд рассуждать о вещах, о которых имеет очень поверхностное представление, причем, мыслеформ кроме "фигня" и "распил" особо не наблюдается.
@maxp Это все необходимые признаки хорошего политолога — может бросать писание кода и начинать грести деньги лопатой.
@jahson что-то мне кажется это не об этом. Я могу сделать редьюс внутри которого мап в мапе. Но это жесть, как по мне
@y.khmelevskii (for [b1 b a1 a] (assoc a1 :component b1))
даёт ровно тот результат, который ты запросил.
Порядок в for
изменён по сравнению с тем, что предложил @jahson
(for [b1 b a1 a] (assoc {} :component b1 :accent (:accent a1)))
не верь им, делай так))
Даже так (vec (for [b1 b a1 a] (merge {:component b1} a1)))
@ilevd Зачем assoc
в пустую карту?
Типа, чтобы мусор не приехал? Ну, да.
@dottedmag да не, там просто порядок получается другой, сначала :component, потом :accent как в запрошенном резалте 😀
(not= (map first (for [b1 b a1 a] (assoc {} :component b1 :accent (:accent a1))))
(map first (for [b1 b a1 a] (assoc a1 :component b1))))
так ничего, что в хешах кложурных порядок не определен?
Ну вообще, конечно, это шутка была, но по факту:
(reduce (fn [m i]
(let [m* (assoc m i i)]
(prn (type m*) m*)
m*))
{} (range 12))
clojure.lang.PersistentArrayMap {0 0}
clojure.lang.PersistentArrayMap {0 0, 1 1}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 9 9, 5 5, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 9 9, 5 5, 10 10, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 11 11, 9 9, 5 5, 10 10, 8 8}
=> {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 11 11, 9 9, 5 5, 10 10, 8 8}
думаю опечатка
супер, спасибо! я не до конца понимал как работает for
Интересно, насколько кложурный подход к стабильности отличается от мейнстримного. Я сегодня хотел добавить в Homebrew приложение, которое последний раз релизилось в 2006 (потому что в формате .djvu за последние 11 лет особых изменений не произошло), а там явным образом не принимают формулы для софта, который за последний год не выпустил ни одного релиза.
хипстера рубисты