如何在 Clojure 中映射 PersistentHashMaps 的 PersistentVector?
How to map PersistentVector of PersistentHashMaps in Clojure?
我有一个 PersistentHashMap 的 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
的集合,所以我需要映射一个向量并从每个映射 select id
值。
我愿意:
(map #(get % :id) (all-users))
有更好的方法吗?
关键字可以用作函数。
(map :id (all-users))
如果您使用的是 Clojure 1.7 并且不需要懒惰,例如。 G。想要将整个集合实现为矢量,您可以使用地图转换器:
(into [] (map :id) (all-users))
除非你知道你需要 map 的惰性行为,否则我总是建议使用 mapv
:
(def all-users [ {:id 111 ...}
{:id 222 ...}
... ] )
(mapv :id all-users)
不同之处在于 mapv
始终立即求值,并将结果填充到向量中以便于访问。惰性序列非常适用于非常大或非常慢的事物,但它们引入了一层额外的时序不确定性,而 99% 的用例都不需要它。
我有一个 PersistentHashMap 的 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
的集合,所以我需要映射一个向量并从每个映射 select id
值。
我愿意:
(map #(get % :id) (all-users))
有更好的方法吗?
关键字可以用作函数。
(map :id (all-users))
如果您使用的是 Clojure 1.7 并且不需要懒惰,例如。 G。想要将整个集合实现为矢量,您可以使用地图转换器:
(into [] (map :id) (all-users))
除非你知道你需要 map 的惰性行为,否则我总是建议使用 mapv
:
(def all-users [ {:id 111 ...}
{:id 222 ...}
... ] )
(mapv :id all-users)
不同之处在于 mapv
始终立即求值,并将结果填充到向量中以便于访问。惰性序列非常适用于非常大或非常慢的事物,但它们引入了一层额外的时序不确定性,而 99% 的用例都不需要它。