Clojure如何将同key的map列表转换为对应值的出现频率统计map
Clojure实现多map列表的取值频率统计
实现思路
- 第一步:提取列表中所有map指定key的对应值,得到值序列
- 第二步:使用Clojure内置的
frequencies函数统计值序列中各元素的出现次数 - 第三步:将统计结果中的数字键转换为关键字格式,匹配预期输出
完整实现代码
;; 示例输入 (def input '({:a 1} {:a 1} {:a 2} {:a 2} {:a 3} {:a 2})) ;; 单行实现 (reduce-kv (fn [m k v] (assoc m (keyword (str k)) v)) {} (frequencies (map :a input))) ;; 封装为通用函数,支持自定义提取key (defn count-map-values [extract-key coll] (reduce-kv (fn [res k cnt] (assoc res (keyword (str k)) cnt)) {} (frequencies (map extract-key coll)))) ;; 调用示例 (count-map-values :a input)
输出结果
{:1 2, :2 3, :3 1}
内容的提问来源于stack exchange,提问作者Guilherme Umemura
相关产品推荐
相关产品推荐

