填充 Clojure 向量
Fill a Clojure vector
我正在尝试使用地图中的值填充 Clojure 向量。
我在地图中有另一个特定键的向量,用于存储我需要的值。
我需要迭代 key-vec,从映射中获取值并将它们存储在另一个向量中。
我试过使用 loop+recur:
(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 以其 minimalistic/efficient 代码编写风格而闻名,我想知道是否有更好的方法。
有什么想法吗?
我会说,最惯用的方法是使用原始向量。我看不出有任何理由显式克隆不可变数据结构。
您希望 select-keys
函数仅从您的地图中提取感兴趣的键。参见:http://clojuredocs.org/clojure.core/select-keys
然后,使用 vals
函数从过滤后的映射中提取所有值:
> (def my-map {:a 1 :b 2 :c 3})
> (def my-keys [:a :b])
> (select-keys my-map my-keys)
{:a 1, :b 2}
> (def filtered-map (select-keys my-map my-keys))
> filtered-map
{:a 1, :b 2}
> (vals filtered-map)
(1 2)
您应该始终在浏览器选项卡中打开 Clojure 备忘单。它对于找到您想要的功能非常有用。继续反复研究它,因为您会在多年内不断发现新事物。这是我最喜欢的版本:
http://jafingerhut.github.io/cheatsheet/clojuredocs/cheatsheet-tiptip-cdocs-summary.html
使用:
(def my-map {:a 1 :b 2 :c 3})
(def my-keys [:a :b])
...一个简单快速的解决方案是
(mapv my-map my-keys)
;[1 2]
备选方案
(vals (select-keys my-map my-keys))
;(2 1)
... 可能不会(在这种情况下,不会)维持 my-keys
.
给出的顺序
我正在尝试使用地图中的值填充 Clojure 向量。 我在地图中有另一个特定键的向量,用于存储我需要的值。 我需要迭代 key-vec,从映射中获取值并将它们存储在另一个向量中。
我试过使用 loop+recur:
(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 以其 minimalistic/efficient 代码编写风格而闻名,我想知道是否有更好的方法。
有什么想法吗?
我会说,最惯用的方法是使用原始向量。我看不出有任何理由显式克隆不可变数据结构。
您希望 select-keys
函数仅从您的地图中提取感兴趣的键。参见:http://clojuredocs.org/clojure.core/select-keys
然后,使用 vals
函数从过滤后的映射中提取所有值:
> (def my-map {:a 1 :b 2 :c 3})
> (def my-keys [:a :b])
> (select-keys my-map my-keys)
{:a 1, :b 2}
> (def filtered-map (select-keys my-map my-keys))
> filtered-map
{:a 1, :b 2}
> (vals filtered-map)
(1 2)
您应该始终在浏览器选项卡中打开 Clojure 备忘单。它对于找到您想要的功能非常有用。继续反复研究它,因为您会在多年内不断发现新事物。这是我最喜欢的版本:
http://jafingerhut.github.io/cheatsheet/clojuredocs/cheatsheet-tiptip-cdocs-summary.html
使用
(def my-map {:a 1 :b 2 :c 3})
(def my-keys [:a :b])
...一个简单快速的解决方案是
(mapv my-map my-keys)
;[1 2]
备选方案
(vals (select-keys my-map my-keys))
;(2 1)
... 可能不会(在这种情况下,不会)维持 my-keys
.