Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure-计算向量内hashmap中的出现次数_Clojure - Fatal编程技术网

clojure-计算向量内hashmap中的出现次数

clojure-计算向量内hashmap中的出现次数,clojure,Clojure,给定以下向量: [{:id "1" :performed [{:type "typeA"}, {:type "typeA"}, {:type "typeB"}]}, {:id "2" :performed [{:type "typeB"}, {:type "typeB"}, {:type "typeB"}]} 如何计算已执行类型的出现次数 预期产出: [{:id "1" :typeA 2 :typeB 1}, {:id "2" :typeB "3"}] 您的输入不是有效的数据结构,我在假

给定以下向量:

[{:id "1" :performed [{:type "typeA"}, {:type "typeA"}, {:type "typeB"}]}, 
 {:id "2" :performed [{:type "typeB"}, {:type "typeB"}, {:type "typeB"}]}
如何计算已执行类型的出现次数

预期产出:

[{:id "1" :typeA 2 :typeB 1}, {:id "2" :typeB "3"}]

您的输入不是有效的数据结构,我在假设您需要地图向量的情况下对其进行了清理,并确保
type
始终是一个关键字:

(def foo 
  [{:id "1" :performed [{:type "typeA"} {:type "typeA"} {:type "typeB"}]} 
   {:id "2" :performed [{:type "typeB"} {:type "typeB"}{:type "typeB"}]}])

(defn do-eet [vector-of-maps]
  (for [[id performed] 
        (map (juxt :id :performed) vector-of-maps)]
      (merge {:id id } 
             (frequencies (mapcat vals performed)))))

(do-eet foo)

在您的示例中,括号不太匹配,但假设您的意思是这样的

(def data
  [{:id "1" :performed [{:type "typeA"}, {:type "typeA"}, {:type "typeB"}]}
   {:id "2" :performed [{:type "typeB"}, {:type "typeB"}, {:type "typeB"}]}])
你可以写

(mapv 
  (fn [{:keys [id performed]}]
      (->> performed
           (map (comp keyword :type))
           frequencies
           (into {:id id})))
  data)
要得到这个答案:

[{:id "1", :typeA 2, :typeB 1} {:id "2", :typeB 3}]

但是,您可以考虑另一个代理是否能更好地为您服务。比如说

(->> data
 (map (juxt :id #(->> % :performed (map :type) frequencies)))
 (into {}))
会给出结果吗

{"1" {"typeA" 2, "typeB" 1}, "2" {"typeB" 3}}

我更喜欢你的:)谢谢!这一切都是关于语言的表现力:)