从Clojure地图过滤零值?

Eri*_*ver 15 clojure map filter

nil从Clojure地图过滤值的最佳方法是什么{}?

{ :a :x :b nil :c :z }
;;=>  { :a :x, :c :z }
Run Code Online (Sandbox Code Playgroud)

mik*_*era 36

我会用:

(into {} (filter (comp some? val) {:a :x, :b nil, :c :z}))

=> {:a :x, :c :z}
Run Code Online (Sandbox Code Playgroud)

做一些?显式检查很重要,因为如果你这样做,(into {} (filter val {...}))你将错误地删除布尔值为false的值.

  • 或者``into {}(remove(comp nil?val){:a:x:b nil:c:z})) (9认同)
  • 是的,删除版本是等效的.事实上,删除实际上是使用过滤器在Clojure源中实现的,如:`(filter(complement pred)coll)`.带过滤器的版本稍微快一点,带删除的版本稍微缩短一下:-) (3认同)

mis*_*off 5

我使用以下代码:

(into {} (filter val {:a 1, :b 2, :c nil}))
;;=> {:a 1, :b 2}
Run Code Online (Sandbox Code Playgroud)

注意:这将删除错误值和nils

  • 这个过滤器也错了:( (5认同)