web-dev-qa-db-fra.com

Scala différence de deux listes

J'ai deux listes:

val list1 = List("Word1","Word2","Word2","Word3","Word1")
val list2 = List("Word1","Word4")

Je veux supprimer toutes les occurrences des éléments list2 De list1, C'est-à-dire que je veux

List("Word2","Word2","Word3") <= list1 *minus* list2

J'ai fait list1 diff list2 Qui me donne List("Word2","Word2","Word3","Word1") qui ne supprime que la première occurrence de "Word1".

Je ne peux pas le convertir en ensembles car j'ai besoin de connaissances sur les doublons (voir "Word2" ci-dessus). Que faire?

30
Pavan K Mutt

Vous pouvez

val unwanted = list2.toSet
list1.filterNot(unwanted)

pour supprimer tous les éléments de list2. (Vous n'avez pas besoin de connaître les doublons dans list2.)

60
Rex Kerr

Vous pouvez essayer ceci:

val list1 = List("Word1","Word2","Word2","Word3","Word1")
val list2 = List("Word1","Word4")

println(list1.filterNot(list2.contains(_)))
8
cmbaxter