Я пытаюсь заполнить вектор Clojure со значениями с карты. У меня есть еще один вектор конкретных ключей на карте, где хранятся значения, которые мне нужны. Мне нужно перебрать ключ-vec, получить значения с карты и сохранить их в другом векторе.Заполнить вектор Clojure
Я попытался с помощью петли + повторялись:
(let [keys-vec (:keys-vec item)
my-map (:my-map item)]
(loop [newV []
i 0]
(if (< i (count keys-vec))
(recur
(conj newV (get my-map (get keys-vec i)))
(inc i))
newV)))
И это сработало. Но я знаю, что Clojure известен своим минималистичным/эффективным стилем написания кода, и я хотел знать, есть ли лучший способ.
Любые идеи?
Не могли бы вы указать, чего вы пытаетесь достичь? Разве не '(def new-vector existing-vector)' разрешает проблему? – superkonduktr
Я считаю, что он близок к анти-шаблону в Clojure для итерации по вектору с использованием индексов 'loop' и elements, поскольку коллекции Clojure неизменны и постоянны. Вместо этого вам рекомендуется использовать функции сокращения. Идиоматический способ выполнения задачи будет просто «(vals (select-keys my-map keys-vec))». – superkonduktr
Ты прав, это сработало. благодаря! –