从地图列表中映射

Ale*_*toy 1 clojure

接下来我的问题是,我有地图列表,例如:

({:id 1 :request-count 10 ..<another key-value pair>..} 
 {:id 2 :request-count 15 ..<another key-value pair>..} 
 ...)
Run Code Online (Sandbox Code Playgroud)

需要创建带有记录的地图,其中,key是'id'的值,value是'request-count'的值,对于来自prev示例的每个地图,如:

{1 10
 2 15
 ...}
Run Code Online (Sandbox Code Playgroud)

我知道怎么做.我的问题是 - 标准库有实现这个功能吗?或者也许我可以通过组合少量功能实现这一点,而不是"减少"?

tar*_*tar 8

使用该juxt函数生成一系列对,然后将它们放入地图中:

(into {} (map (juxt :id :request-count) data))
Run Code Online (Sandbox Code Playgroud)

例:

user=> (def data [{:id 1 :request-count 10 :abc 1}
  #_=>            {:id 2 :request-count 15 :def 2}
  #_=>            {:id 3 :request-count 20 :ghi 3}])
#'user/data
user=> (into {} (map (juxt :id :request-count) data))
{1 10, 2 15, 3 20}
Run Code Online (Sandbox Code Playgroud)

请注意,如果有多个映射data相同:id,则遇到的最后一个map映射将是在输出映射中存活的映射.