gpt4 book ai didi

clojure - 有没有办法在 Clojure 中一次进行分组和计数?

转载 作者:行者123 更新时间:2023-12-04 03:59:27 25 4
gpt4 key购买 nike

假设有如下序列:

["ab" "ba" "ac" "ca" "bc" "cc"]

我想知道频率,但键应该是排序的字符串。简而言之,我想得到这样的结果:
{"ab" 2, "ac" 2, "bc" 1, "cc" 1}

Clojure 有 frequencies功能,但它不接受按键功能。
所以,通常我可以通过 group-by 的组合来做到这一点和 map :
(->> ["ab" "ba" "ac" "ca" "bc" "cc"]
(group-by #(apply str (sort %)))
(map (fn [[k vs]] [k (count vs)]))
(int {}))

但是,这看起来很冗长。即使在 Java 中,我也可以使用 Stream API 同时进行分组和计数,如下所示:(假设有一个方法 sortedStr(s)
Arrays.asList("aa", "ab", "ab", "bb", "cc" , "ca")
.stream()
.collect(groupingBy(s->sortedStr(s), counting()));

有没有办法像 Java8 一样在 clojure 中进行分组和计数?

最佳答案

这是使用内置 frequencies 的 Clojure 版本功能。

 (frequencies (map #(apply str (sort %)) 
["ab" "ba" "ac" "ca" "bc" "cc"]))
;;=> {"ab" 2, "ac" 2, "bc" 1, "cc" 1}

我可能错了,但 Java 版本已经在您的示例中获得了排序键。在这种情况下,只需调用 frequencies在 Clojure 中(如果我正确理解了您的问题)。

编辑:看起来 Java 版本同时被更正了,所以我的最后一条评论已经过时了。

关于clojure - 有没有办法在 Clojure 中一次进行分组和计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38884410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com