Clojure过滤列表中值的映射序列

时间:2017-11-21 22:54:08

标签: 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"}]

编辑:修复拼写错误

1 个答案:

答案 0 :(得分:1)

这会产生所需的输出:

(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"})

此解决方案使用这两个字符串的 set ,并测试每个输入映射的:x以设置成员资格。

我认为您的过滤谓词示例中存在拼写错误和其他一些问题。我在此示例中修复了"0000"拼写错误以获得所需的输出。