查找列表中不在第二个列表中的元素(在scala中)

Enr*_*tyo 19 functional-programming scala list

假设我有两个列表:

val a = List('a', 'b', 'c')
val b = List('a', 'b', 'c', 'd')
Run Code Online (Sandbox Code Playgroud)

我想得到不在第一个列表中的元素(在这种情况下它是'd').我知道我可以用循环来做到这一点,但是有没有任何奇特的功能方法可以在一行中快速完成这项工作?

我一直在查看Scala List API,但只能找到union和intersection(它会给我List('a','b','c','d')和List('a','b) ','c')分别)

oll*_*erg 23

你可以使用diff这个:

scala> b diff a
res1: List[Char] = List(d)
Run Code Online (Sandbox Code Playgroud)

Set如果你正在做的话,你可能想要合作diff.


vod*_*ang 13

我想你可以用b -- a.这是scala的文档:

def -- [B >: A] (that: List[B]) : List[B]
Computes the difference between this list and the given list that.
that
the list of elements to remove from this list.
returns this list without the elements of the given list that.
deprecated: use list1 filterNot (list2 contains) instead
Run Code Online (Sandbox Code Playgroud)

对不推荐使用已弃用的方法,这是当前的好方法: list1 filterNot (list2 contains)

def filterNot (p: (A) ? Boolean) :

List [A]选择此列表中不满足谓词的所有元素.p用于测试元素的谓词.返回一个新列表,该列表包含此列表中不满足给定谓词p的所有元素.保留元素的顺序.定义类:TraversableLike

  • 啊,你甚至复制并粘贴了弃用说明!我的错!=) (2认同)