对于这个称为“表格”的嵌套 map ,

  (def tables
   {:tableA {:occupied false :party nil}
    :tableB {:occupied true :party nil}
    :tableC {:occupied false :party nil}})

我该如何过滤并获取:occupied = false的键?

正确的结果应该是(:tableA :tableC)
我可以使用“过滤器” HOF来做到这一点吗?我应该使用列表理解吗?

最佳答案

您可以使用keep轻松完成此操作:

(keep (fn [[k v]] (if-not (:occupied v) k)) tables)

但是,正如您所观察到的,每当您要映射/过滤序列时,尤其是在处理嵌套序列时,使用for通常是一个很好的解决方案。
(for [[k v] tables :when (not (:occupied v))] k)

我通常更喜欢使用for,尤其是当我想对目标项目使用解构时。在这种情况下,解构非常适合将键/值对与[k v]绑定(bind)。

关于map - clojure过滤器嵌套 map 以基于内部 map 值返回键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19886035/

10-11 06:22