对于这个名为“tables”的嵌套 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)。
关于dictionary - clojure 过滤嵌套映射以根据内部映射值返回键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886035/