Я знаю, что могу это сделать:Как выбрать элементы коллекции на основе другого типа?
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> val b = List(2,4)
b: List[Int] = List(2, 4)
scala> a.filterNot(b.toSet)
res0: List[Int] = List(1, 3)
Но я хотел бы, чтобы выбрать элементы коллекции на основе их целочисленного ключа, как в следующем примере:
case class N (p: Int , q: Int)
val x = List(N(1,100), N(2,200), N(3,300))
val y = List(2,4)
val z = .... ?
Z // want Z to be ((N1,100), (N3,300)) after removing the items of type N with 'p'
// matching any item in list y.
Я знаю, что один из способов это что-то вроде следующего, что делает вышеперечисленный неработающий код работы:
val z = x.filterNot(e => y.contains(e.p))
но это кажется очень неэффективным. Есть ли способ лучше?
Почему, на ваш взгляд, это неэффективно? Выполняли ли вы какие-либо измерения производительности? –
На основании http://stackoverflow.com/questions/16278098/scala-difference-of-two-lists –
Конвертировать 'y' в' Set' сначала было бы достаточно хорошо, я думаю? – Kabie