2015-02-23 43 views

回答

3

的灵感来自@Symfrog:

(defn recursive-filter [m k] 
    (filter #(and (map? %) (contains? % k)) (tree-seq map? vals m))) 
6

您可以使用以下方法:

(def data {:a {:id 5} 
      :d {:id 58} 
      :x {:id 4 :c {:id 3 :d 4}}}) 

(defn recursive-filter [m f] 
    (filter #(and (map? %) (f %)) 
      (tree-seq map? vals m))) 

(recursive-filter data :id) 
+0

+1:用好'树seq'的。 +1:'f'可以是* any *函数,它在地图上执行测试,而不仅仅是关键字。凉! -1:不适用于不可调用的按键。 -1:如果一个键映射到值“false”或“nil”,则不起作用。 Net = 0 – 2015-02-23 08:10:18

+0

@AlexD如果需要使用不是关键字的关键字(例如true),可以使用以下内容:'(递归筛选数据#(get%true))' – Symfrog 2015-02-23 08:14:15

+0

让我取回“Net = 0“......这绝对值得+1。 – 2015-02-23 08:20:29