我想从这个由 jdbc 查询返回的地图列表中:
'({:series_id 1 :expires_at "t1"} {:series_id 2 :expires_at "t2"})
Run Code Online (Sandbox Code Playgroud)
到单个地图,如:
{1 "t1" 2 "t2"}
Run Code Online (Sandbox Code Playgroud)
这样我就可以expires_at简单地使用series_id整数来查找了。
我已经到了:
db.core=> (mapcat #((comp vals select-keys) %1 [:series_id :expires_at])
'({:series_id 1, :expires_at "t1"} {:series_id 2 :expires_at "t2"}))
(1 "t1" 2 "t2")
Run Code Online (Sandbox Code Playgroud)
但那是一个清单,而不是一张地图。
我想知道这是否是 reduce 的候选者,和/或是否还有其他一些巧妙的方法可以做到这一点。
您可以将每个映射转换为一对,[series_id expires_at]然后将对应的对序列转换为映射:
(def l '({:series_id 1 :expires_at "t1"} {:series_id 2 :expires_at "t2"}))
(into {} (map (juxt :series_id :expires_at) l))
Run Code Online (Sandbox Code Playgroud)