【发布时间】:2017-01-07 16:06:22
【问题描述】:
我正在尝试用地图中的值填充 Clojure 向量。 我在地图中有另一个特定键的向量存储我需要的值。 我需要迭代 key-vec,从地图中获取值并将它们存储在另一个向量中。
我尝试过使用循环+递归:
(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)不解决问题吗? -
我相信在 Clojure 中使用
loop和元素的索引来迭代向量接近于反模式,因为 Clojure 的集合是不可变的和持久的。相反,我们鼓励您使用归约函数。完成任务的惯用方式就是(vals (select-keys my-map keys-vec))。 -
你说得对,它有效。谢谢!
标签: arrays vector clojure fill idioms