function | since v0.0-927 | clojure.core/contains? | Edit |
(contains? coll v)
Returns true if the coll
contains the lookup key v
, otherwise returns false.
Note that for numerically indexed collections like vectors and arrays, this tests if the numeric key is within the range of indexes.
contains?
operates in constant or logarithmic time, using get
to perform
the lookup. It will not perform a linear search for a value. some
is
used for this purpose:
(some #{value} coll)
Sets and Maps provide key lookups, so contains?
works as expected:
(contains? #{:a :b} :a)
;;=> true
(contains? {:a 1, :b 2} :a)
;;=> true
(contains? {:a 1, :b 2} 1)
;;=> false
Vectors provide integer index lookups, so contains?
works appropriately:
(contains? [:a :b] :b)
;;=> false
(contains? [:a :b] 1)
;;=> true
Lists and Sequences do not provide lookups, so contains?
will not work:
(contains? '(:a :b) :a)
;;=> false
(contains? '(:a :b) 1)
;;=> false
(contains? (range 3) 1)
;;=> false
Returns true if key is present in the given collection, otherwise returns false. Note that for numerically indexed collections like vectors and arrays, this tests if the numeric key is within the range of indexes. 'contains?' operates constant or logarithmic time; it will not perform a linear search for a value. See also 'some'.
(defn contains?
[coll v]
(cond
(implements? IAssociative coll)
(-contains-key? coll v)
(native-satisfies? IAssociative coll)
(-contains-key? coll v)
(identical? (get coll v lookup-sentinel) lookup-sentinel)
false
:else
true))