让我们制作频率图:
(reduce #(update-in %1 [%2] (fnil inc 0)) {} ["a" "b" "a" "c" "c" "a"])
Run Code Online (Sandbox Code Playgroud)
我担心的是lambda中的表达#(...)- 这是规范的方式吗?我能做得更好/更短吗?
编辑:我发现的另一种方式:
(reduce #(assoc %1 %2 (inc %1 %2 0)) {} ["a" "b" "a" "c" "c" "a"])
Run Code Online (Sandbox Code Playgroud)
看似非常相似,有什么利弊?性能?
从Clojure 1.2开始,有一个frequencies功能clojure.core:
user=> (doc frequencies)
-------------------------
clojure.core/frequencies
([coll])
Returns a map from distinct items in coll to the number of times
they appear.
Run Code Online (Sandbox Code Playgroud)
例:
user=> (frequencies ["a" "b" "a" "c" "c" "a"])
{"a" 3, "b" 1, "c" 2}
Run Code Online (Sandbox Code Playgroud)
它碰巧使用瞬态和三元get; 看看(source frequencies)代码,它是高度的性能感知时的惯用语.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |