Clojure为列表中的值筛选映射序列

Clojure为列表中的值筛选映射序列,clojure,Clojure,尝试筛选值列表中键具有值的映射序列 试着做这样的事情 => (filter (fn [foo] #(some(:x foo) ["0000", "2222"])) [{ :y "y" :x "0000"} {:y "y" :z "z" :x "1111"} {:y "y" :z "z" :x "2222"}]) ; I want to return this => [{:y "y" :z "z" :x "1111"}] 编辑:固定打字

尝试筛选值列表中键具有值的映射序列

试着做这样的事情

=> (filter (fn [foo]
           #(some(:x foo) ["0000", "2222"])) 
           [{ :y "y" :x "0000"} {:y "y" :z "z" :x "1111"} {:y "y" :z "z" :x "2222"}])

; I want to return this
=> [{:y "y" :z "z" :x "1111"}]

编辑:固定打字错误

这将生成所需的输出:

(filter #(not (#{"0000", "2222"} (:x %)))
        [{:y "y" :x "0000"}
         {:y "y" :z "z" :x "1111"}
         {:y "y" :z "z" :x "2222"}])
=> ({:y "y", :z "z", :x "1111"})
此解决方案使用这两个字符串的集合,并测试每个输入映射的
:x
,以确定集合成员资格


我认为您的过滤器谓词示例中存在输入错误和其他一些问题。我修复了本例中的
“0000”
打字错误,以获得所需的输出。

谢谢,阅读和理解起来要简单得多。我尝试使用与remove类似的东西,但与filter有相同的问题。这应该可以用remove缩短:
(remove#(#{“0000”,“2222”}(:x%))
(remove#(>%:x#{“0000”,“2222”})
也应该可以工作。
(remove(comp#{“0000”,“2222”}:x)
)我总是忘记comp。