dictionary - clojure 过滤嵌套映射以根据内部映射值返回键

标签 dictionary clojure

对于这个名为“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/

相关文章:

perl - 在 Perl 中使用带有哈希的字典的 Python 等效字符串格式化

c++ - 将 std::tuple 插入 std::map

clojure - 从较小的流创建无限流

recursion - 使用 Spectre 递归地改变 map 中的值

Python 求和字典列表中元组中的值?

c# - unity 序列化字典 `Index Out Of Range` 后12项

postgresql - Korma 和 Postgresql 的默认 ID?

clojure - clojure defn 参数不允许使用 ^char 类型提示

clojure - 如何使用 Compojure 显示图像?

java - 嵌套 HashMap 无法正常工作