【发布时间】:2013-10-14 21:15:29
【问题描述】:
在 Clojure 中计算嵌套映射的某些属性的惯用方法是什么?
给定以下数据结构:
(def x {
:0 {:attrs {:attributes {:dontcare "something"
:1 {:attrs {:abc "some value"}}}}}
:1 {:attrs {:attributes {:dontcare "something"
:1 {:attrs {:abc "some value"}}}}}
:9 {:attrs {:attributes {:dontcare "something"
:5 {:attrs {:xyz "some value"}}}}}})
我怎样才能产生所需的输出:
(= (count-attributes x) {:abc 2, :xyz 1})
这是我迄今为止的最大努力:
(defn count-attributes
[input]
(let [result (for [[_ {{attributes :attributes} :attrs}] x
:let [v (into {} (remove (comp not :attrs) (vals attributes)))]]
(:attrs v))]
(frequencies result)))
这会产生以下内容:
{{:abc "some value"} 2, {:xyz "some value"} 1}
【问题讨论】:
-
我认为
tree-seq的答案要好得多
标签: clojure