Haskell相交(List)

use*_*584 5 haskell list intersect

我试图得到两个列表相交的"对立面":如:

let all  = [1..5]
let mask = [2,3]
let res  = ???
-- let res = all `intersect` mask <-- reverse/opposite ?
-- I want to get [1,4,5] ?
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 16

你正在寻找集合差异,这是Data.List\\运算符:

Prelude> import Data.List ((\\))
Prelude Data.List> let all  = [1..5]
Prelude Data.List> let mask = [2,3]
Prelude Data.List> all \\ mask
[1,4,5]
Run Code Online (Sandbox Code Playgroud)

  • @ user914584但请注意`(\\)`只从第一个列表中删除第一个元素中的一个元素,例如`[1,2,3,2] \\ [2] = [1,3,2] `.如果这对你的用例不好,``filter(`notElem` second)first``是另一种选择. (3认同)