嗨,我正在尝试执行一个返回 3 个最常见字符串的函数
(take 3 (sort-by val > (frequencies s))))
(freq ["hi" "hi" "hi" "ola" "hello" "hello" "string" "str" "ola" "hello" "hello" "str"])
Run Code Online (Sandbox Code Playgroud)
到目前为止我已经得到了这个,但注意到如果有超过 1 个具有相同频率的字符串,它将不会返回。有没有办法按频率函数的最高值(最终是前 3 个最高值)来过滤频率函数的值?
提前致谢。
我会提出稍微不同的解决方案,其中涉及用group-by值(即项目的计数)反转频率图:
(->> data
frequencies
(group-by val))
;;{3 [["hi" 3]],
;; 2 [["ola" 2] ["str" 2]],
;; 4 [["hello" 4]],
;; 1 [["string" 1]]}
Run Code Online (Sandbox Code Playgroud)
所以你唯一需要的就是对它进行排序和处理:
(->> data
frequencies
(group-by val)
(sort-by key >)
(take 3)
(mapv (fn [[k vs]] {:count k :items (mapv first vs)})))
;;[{:count 4, :items ["hello"]}
;; {:count 3, :items ["hi"]}
;; {:count 2, :items ["ola" "str"]}]
Run Code Online (Sandbox Code Playgroud)