Сравнение элементов в ListBuffer
У меня два ListBuffer
s:
import scala.collection.mutable._
val lstbufWhichChange = ListBuffer("Core", "One", "Zero", "Right", "Top", "Else")
val lstbufStatic = ListBuffer("Core", "Right", "Left", "Zero", "One", "Two", "Top", "Bottom", "Else")
lstbufWhichChange
это подмножество lstbufStatic
, Я пытаюсь найти способ сравнить эти две коллекции, если lstbufWhichChange
имеет элементы в том же порядке, как lstbufStatic
даже если он не содержит их всех (это подмножество). Как я могу это сделать?
2 ответа
Решение
Один из способов использования встроенных функций может быть следующим: сначала получить общие элементы в обоих списках.
val commonEle = lstbufWhichChange.intersect(lstbufStatic)
После этого получите элементы из lstbufStatic
которые присутствуют в commonEle
список
val list = lstbufStatic.filter(e => commonEle.contains(e))
list
должен быть равен commonEle
список.
В приведенном вами примере lstbufWhichChange
имеет Right
после one
следовательно, commonEle.equals(list)
вернусь false
, Но если вы поменяете местами эти элементы, он вернет true.
Мое решение заключается в следующем:
val res = lstbufWhichChange.foldLeft(true, lstbufStatic)((s, e) => {
val l = s._2.dropWhile(_ != e)
(s._1 && l.nonEmpty, l)
})
println(res._1)