You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:39