【问题标题】:Converting a vector of maps to map of maps in Clojure在 Clojure 中将地图向量转换为地图地图
【发布时间】:2016-10-30 00:05:00
【问题描述】:

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

[{:categoryid 1, :categoryname "foo" } 
 {:categoryid 2, :categoryname "bar" } 
 {:categoryid 3, :categoryname "baz" }]

并想生成这样的地图地图,以便按类别名称搜索

{"foo" {:categoryid 1, :categoryname "foo" }, 
 "bar" {:categoryid 2, :categoryname "bar" }, 
 "baz" {:categoryid 3, :categoryname "baz" }}

我该怎么做?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    另一种方式:(into {} (map (juxt :categoryname identity) [...]))

    【讨论】:

      【解决方案2】:
      (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" }])
      

      【讨论】:

        【解决方案3】:
        (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"}]}
        

        (我现在意识到这不是你想要的……对不起)

        【讨论】:

          【解决方案4】:

          我没有在 Clojure 中测试过,但在 ClojureScript 中,这个变体似乎比其他变体更快:

          (reduce #(assoc %1 (:categoryname %2) %2) {} [...])
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-28
            • 2014-10-07
            • 1970-01-01
            • 2012-11-30
            • 1970-01-01
            • 1970-01-01
            • 2015-06-16
            相关资源
            最近更新 更多