测试列表是否包含值

时间:2015-11-20 10:52:12

标签: clojure

我有一个带有地图的矢量(每个都有一个id),我想只选择id列表中不是的地图。最常用的方法是什么?

(def input [{:id 1 :asd 8} {:id 2 :asd 4} {:id 3 :asd 7} {:id 4 :asd 4}])
(def connected-ids '(1 3))

;; this is what I want to get:
(def not-connected [{:id 2 :asd 8} {:id 4 :asd 4})

返回的集合不一定是矢量。

1 个答案:

答案 0 :(得分:4)

我的建议是

  1. 将连接的ID保存在中:(def connected-ids #{1 3})
    这一步为我们提供了重复数据删除(在黑名单中有两次ID是没有意义的)一个方便的成员资格测试函数 - 只需将集合作为一个函数调用它将返回(一个)参数iff它是一个成员,否则nil。在渐近时间方面,它比扫描列表以检查值是否在其中更便宜。
  2. 使用remove删除我们不想要的项目:
  3. (def not-connected (remove (comp connected-ids :id) input))