如何从列表中删除多个项目?

6 clojure

我有一个列表[2 3 5],我想用它来删除另一个列表中的项目,如[1 2 3 4 5],这样我得到[1 4].

谢谢

Uro*_*vic 18

试试这个:

(let [a [1 2 3 4 5]
      b [2 3 5]]
  (remove (set b) a))
Run Code Online (Sandbox Code Playgroud)

返回(1 4).

remove顺便说一下,该函数接受一个谓词和一个集合,并返回一个不满足谓词的元素序列(在本例中是一个集合).


Ion*_*tan 5

user=> (use 'clojure.set)
nil
user=> (difference (set [1 2 3 4 5]) (set [2 3 5]))
#{1 4}
Run Code Online (Sandbox Code Playgroud)

参考:

  • 矢量不是一组.将其转换为集合时,不会保留向量的顺序.如果我正确地理解了这个问题,(差异(设置[9 2 3 4 5])(设置[2 3 5]))返回#{4 9}时它应该返回[9 4]和(差异(设置[1 1 1]) 2 3 4 5])(设置[2 3 5]))应该返回[1 1 4]而不是#{1 4}如果他想要设置语义,他可能会使用一个集合开始. (2认同)