比较ListBuffer中的元素

时间:2015-02-09 09:29:33

标签: scala 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")

lstbufWhichChangelstbufStatic的子集。我想要做的是,找到一种比较这两个集合的方法,如果lstbufWhichChange具有与lstbufStatic相同顺序的元素,即使它不包含所有这些元素(它是一个子集)。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

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

  val commonEle = lstbufWhichChange.intersect(lstbufStatic)

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

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

list应该等于commonEle列表。

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

答案 1 :(得分:2)

我的解决方案如下:

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

  println(res._1)