Clojure:如何统计向量内哈希映射中performed类型的出现次数?
统计Clojure向量中performed类型的出现次数
这事儿不难,用Clojure的核心函数就能轻松搞定!我给你拆解一下实现思路和代码:
首先,先把你的输入数据定义成一个Clojure变量方便测试:
(def input-data [{:id "1" :performed [{:type "typeA"}, {:type "typeA"}, {:type "typeB"}]} {:id "2" :performed [{:type "typeB"}, {:type "typeB"}, {:type "typeB"}]}])
接下来,我们写一个函数来处理统计逻辑:
(defn count-performed-types [data] (map (fn [item] ;; 统计当前条目中所有performed类型的出现次数,并把字符串键转为关键字 (let [type-counts (->> (:performed item) (map :type) ;; 提取所有type字段的值,得到字符串序列 frequencies ;; 统计每个字符串的出现次数 (into {} (map (fn [[k v]] [(keyword k) v]))))] ;; 把字符串键转成关键字 ;; 合并id和统计结果 (merge {:id (:id item)} type-counts))) data))
调用这个函数就能得到你想要的结果:
(count-performed-types input-data) ;; 输出结果: ;; [{:id "1", :typeA 2, :typeB 1} {:id "2", :typeB 3}]
代码解释
map遍历:逐个处理输入数据中的每个条目;->>线程宏:把:performed列表一步步处理,先提取所有类型字符串,再统计次数,最后转换键的格式;frequencies:Clojure内置的统计序列元素出现次数的函数,非常适合这个场景;merge:把原始条目的:id和统计出来的类型次数map合并成最终的结果结构。
这个方案还能自动适配其他类型——如果你的数据里出现typeC之类的新类型,函数会自动统计并加入结果里,不用修改代码~
内容的提问来源于stack exchange,提问作者bpereira
相关产品推荐
相关产品推荐

