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

Clojure如何获取频次排名前三的字符串,处理同频次并列场景

解决方案

你可以先提取去重后的前三档最高频次,再按这组频次阈值筛选所有符合条件的条目,就能保留所有并列排名的结果,实现代码如下:

(defn top-n-freqs [n coll]
  (let [freq-map (frequencies coll)
        ;; 提取去重后的前n个最高频次
        top-n-values (take n (sort > (distinct (vals freq-map))))]
    ;; 筛选所有频次属于前n档的条目
    (filter (fn [[k v]] (contains? (set top-n-values) v)) freq-map)))

;; 调用示例,取前3档频次的所有条目
(top-n-freqs 3 ["hi" "hi" "hi" "ola" "hello" "hello" "string" "str" "ola" "hello" "hello" "str"])

示例调用返回结果如下(顺序可自行调整):
(["hello" 4] ["hi" 3] ["ola" 2] ["str" 2])

如果需要返回结果按频次降序固定排序,可以用调整后的版本:

(defn top-n-freqs-sorted [n coll]
  (let [freq-map (frequencies coll)
        top-n-values (take n (sort > (distinct (vals freq-map))))]
    (sort-by val > (filter (fn [[k v]] (contains? (set top-n-values) v)) freq-map))))

内容的提问来源于stack exchange,提问作者Portgas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:02