我有PersistentHectorMaps的PersistentVector:
[
{:url http://www.url.com, id: some_id ...},
{:url http://www.url.com, id: some_id ...},
{:url http://www.url.com, id: some_id ...},
]
我需要这里有一个所有id
的集合,所以我需要映射一个向量,并从每个地图中选择id
值。
我做:
(map #(get % :id) (all-users))
有更好的方法吗?
答案 0 :(得分:4)
关键字可以用作功能。
(map :id (all-users))
如果你在Clojure 1.7上并且不需要懒惰,e。 G。想要将整个集合实现为矢量,你可以使用地图传感器:
(into [] (map :id) (all-users))
答案 1 :(得分:1)
除非你知道你需要地图的懒惰行为,否则我总是建议使用mapv
:
(def all-users [ {:id 111 ...}
{:id 222 ...}
... ] )
(mapv :id all-users)
不同之处在于mapv
总是立即进行评估,并将结果填入矢量以便于访问。懒惰序列非常适用于非常大或非常慢的事情,但是它们引入了额外的时序不确定性层,99%的用例都不需要它。