list - 在 Clojure 中过滤列表

标签 list map clojure

我在 Clojure 中使用列表有点困难
我有一个关于过滤器功能的快速问题

假设我有一个由 map 组成的列表
我的代码是:

(def Person {:name Bob } )
(def Person2 {:name Eric } )
(def Person3 {:name Tim } )
(def mylist (list Person Person2 Person3))

我将如何过滤我的列表,例如:我想要列表减去 Person2(意味着减去任何具有 :name Eric 的 map )

非常感谢所有帮助我的人。这是我保证的最后一个问题

最佳答案

为此,最好使用“删除”功能。它接受一个序列,并删除其谓词返回“true”的元素。它基本上与过滤器相反。这是我通过 REPL 处理的一个示例,以及用于相同目的的过滤器用法。

用户> (def m1 {:name "eric":age 32})
#'用户/m1
用户> (def m2 {:name "Rayne":age 15})
#'用户/平方米
用户> (def m3 {:name "connie":age 44})
#'用户/立方米
用户> (def mylist (list m1 m2 m3))
#'用户/我的列表
用户> (过滤器#(not= (:name %) "eric") mylist)
({:name "eric", :age 32})
用户> (删除#(= (:name %) "eric") mylist)
({:name "Rayne", :age 15} {:name "connie", :age 44})

如您所见,remove 更简洁一些,因为您不必使用 not=。此外,在使用 map 时,您不必使用 'get' 函数,除非您希望它在 map 中没有键的情况下返回一些特殊的东西。如果您知道要查找的 key 将在 map 中,则没有理由使用“get”。祝你好运!

关于list - 在 Clojure 中过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123902/

相关文章:

python - 列表到数组转换以使用 ravel() 函数

c# - 将指定文件夹中所有文件夹的名称而不是路径存储到列表中?

java - 仅带键的映射 - 用于包含检查

c++ - 为什么我的 map 分配会导致编译器错误?

c++ - 可以安全地从基于以下范围的 map 中删除吗?

haskell - 您如何解释像 Ring 和 Yesod 这样的纯功能 Web 服务器不是 MVC?

clojure - 为什么 (reduce * []) 的计算结果为 1?

c# - 函数参数中的C#列表

java - 添加原始 Int 而不是 Int 对象有任何风险吗?

clojure - 非法参数异常 : No single method in defprotocol