我有一个这样的地图矢量:
[{:categoryid 1, :categoryname "foo" }
{:categoryid 2, :categoryname "bar" }
{:categoryid 3, :categoryname "baz" }]
并希望生成这样的地图地图,以便按categoryname
进行搜索{"foo" {:categoryid 1, :categoryname "foo" },
"bar" {:categoryid 2, :categoryname "bar" },
"baz" {:categoryid 3, :categoryname "baz" }}
我该怎么做?
答案 0 :(得分:14)
另一种方式:(into {} (map (juxt :categoryname identity) [...]))
答案 1 :(得分:10)
(reduce (fn [m {catname :categoryname :as input}]
(assoc m catname input))
{}
[{:categoryid 1, :categoryname "foo" }
{:categoryid 2, :categoryname "bar" }
{:categoryid 3, :categoryname "baz" }])
更好的是,
(#(zipmap (map :categoryname %) %)
[{:categoryid 1, :categoryname "foo" }
{:categoryid 2, :categoryname "bar" }
{:categoryid 3, :categoryname "baz" }])
答案 2 :(得分:1)
(ns code.groupby
(:use clojure.contrib.seq-utils))
(def vector-of-maps [ {:categoryid 1, :categoryname "foo" }
{:categoryid 2, :categoryname "bar" }
{:categoryid 3, :categoryname "baz" } ])
(group-by :categoryname vector-of-maps)
为您提供地图矢量图
{"bar" [{:categoryid 2, :categoryname "bar"}],
"baz" [{:categoryid 3, :categoryname "baz"}],
"foo" [{:categoryid 1, :categoryname "foo"}]}
(我现在意识到这不是你想要的......抱歉)
答案 3 :(得分:0)
我没有在Clojure中测试它,但在ClojureScript中,这个变体看起来比其他变体更快:
(reduce #(assoc %1 (:categoryname %2) %2) {} [...])