测试列表是否包含Clojure中的特定值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (98)

在Clojure中,测试列表是否包含给定值?

尤其是我现在很困惑:

(contains? '(100 101 102) 101) => false

很明显,我可以编写一个简单的函数来遍历列表并测试是否相等,但是有一个标准的方法来做到这一点吗?

提问于
用户回答回答于

以下是我的标准用途:

(defn in? 
  "true if coll contains elm"
  [coll elm]  
  (some #(= elm %) coll))
用户回答回答于

正确方法如下:

; most of the time this works
(some #{101} '(100 101 102))

当搜索一堆物品中的一个时,你可以使用一个更大的集合; 当搜索false/时nil,可以使用false?/ nil?- 因为(#{x} x)返回x,因此(#{nil} nil)nil; 当搜索多个项目中的一个可能是false或者nil,你可以使用

(some (zipmap [...the items...] (repeat true)) the-collection)

(请注意,这些项目可以传递给zipmap任何类型的集合。)

扫码关注云+社区

领取腾讯云代金券