将地图矢量转换为Clojure中的地图地图

Osm*_*man 9 clojure

我有一个这样的地图矢量:

[{:categoryid 1, :categoryname "foo" } 
 {:categoryid 2, :categoryname "bar" } 
 {:categoryid 3, :categoryname "baz" }]
Run Code Online (Sandbox Code Playgroud)

并且想生成这样的地图地图,以便按categoryname进行搜索

{"foo" {:categoryid 1, :categoryname "foo" }, 
 "bar" {:categoryid 2, :categoryname "bar" }, 
 "baz" {:categoryid 3, :categoryname "baz" }}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

kot*_*rak 14

其他方式: (into {} (map (juxt :categoryname identity) [...]))


Mic*_*zyk 10

(reduce (fn [m {catname :categoryname :as input}]
          (assoc m catname input))
        {}
        [{:categoryid 1, :categoryname "foo" } 
         {:categoryid 2, :categoryname "bar" } 
         {:categoryid 3, :categoryname "baz" }])
Run Code Online (Sandbox Code Playgroud)

更好的是,

(#(zipmap (map :categoryname %) %)
 [{:categoryid 1, :categoryname "foo" } 
  {:categoryid 2, :categoryname "bar" } 
  {:categoryid 3, :categoryname "baz" }])
Run Code Online (Sandbox Code Playgroud)