在地图列表中包含地图

时间:2019-05-23 22:58:36

标签: clojure

我有一张地图列表,我需要知道此列表中是否包含其他地图:

地图列表: [{:a 1} {:a 2} {:a 3}]

我的地图: {:a 2}

预期输出: true

我曾尝试使用contains,但不起作用。 我想出了一个解决方案,但我认为它不是一个好的解决方案:

(map 
   (fn [x] 
      (if (= x {:a 1}) 
         true 
         false))
   [{:a 1} {:a 2} {:a 3}])

此代码的结果是,我得到的是对还是错列表,我将需要查看此列表中是否包含一个真。

所以我的问题是,是否存在某种更容易验证地图列表中是否存在地图的方法?

1 个答案:

答案 0 :(得分:2)

我认为这个问题可以概括为“如何判断序列是否包含值?” some对此有好处:

(some pred coll)

它通过调用pred的每一项从coll返回第一个逻辑真值。

例如,谓词可以是简单的相等性检查:

user=> (some #(= % {:foo 1})
             [{:foo 1} {:foo 2}])
true

使用集合作为谓词也很常见:

  

一个常见的习惯用法是使用set作为pred,例如   如果:fred在序列中,它将返回:fred,否则返回nil:   (some #{:fred} coll)