对于这个称为“表格”的嵌套 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/