1

我有两个ListBuffer

  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即使它不包含所有元素(它是一个子集)。我该怎么做?

4

2 回答 2

2

使用内置函数的一种方法是:首先获取两个列表中的公共元素

  val commonEle = lstbufWhichChange.intersect(lstbufStatic)

之后,获取列表lstbufStatic中存在的元素commonEle

  val list = lstbufStatic.filter(e => commonEle.contains(e))

list应该等于commonEle列表。

在您提供的示例中,lstbufWhichChangeRightafter one,因此commonEle.equals(list)将返回false。但是如果你交换这些元素,那么它将返回 true。

于 2015-02-09T09:49:17.897 回答
2

我的解决方案如下:

  val res = lstbufWhichChange.foldLeft(true, lstbufStatic)((s, e) => {
    val l = s._2.dropWhile(_ != e)
    (s._1 && l.nonEmpty, l)
  })

  println(res._1)
于 2015-02-09T09:50:05.247 回答