我在 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/