比较 ListBuffer 中的元素
Comparing the elements in a ListBuffer
我有两个 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
相同,即使它不包含所有元素(这是一个子集)。我该怎么做?
使用内置函数的一种方法是:
先获取两个列表中的共同元素
val commonEle = lstbufWhichChange.intersect(lstbufStatic)
之后,从 lstbufStatic
中获取出现在 commonEle
列表中的元素
val list = lstbufStatic.filter(e => commonEle.contains(e))
list
应该等于 commonEle
列表。
在您提供的示例中,lstbufWhichChange
在 one
之后有 Right
,因此,commonEle.equals(list)
将 return false
。但是,如果你交换这些元素,那么它将 return 为真。
我的解决方案如下:
val res = lstbufWhichChange.foldLeft(true, lstbufStatic)((s, e) => {
val l = s._2.dropWhile(_ != e)
(s._1 && l.nonEmpty, l)
})
println(res._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
相同,即使它不包含所有元素(这是一个子集)。我该怎么做?
使用内置函数的一种方法是: 先获取两个列表中的共同元素
val commonEle = lstbufWhichChange.intersect(lstbufStatic)
之后,从 lstbufStatic
中获取出现在 commonEle
列表中的元素
val list = lstbufStatic.filter(e => commonEle.contains(e))
list
应该等于 commonEle
列表。
在您提供的示例中,lstbufWhichChange
在 one
之后有 Right
,因此,commonEle.equals(list)
将 return false
。但是,如果你交换这些元素,那么它将 return 为真。
我的解决方案如下:
val res = lstbufWhichChange.foldLeft(true, lstbufStatic)((s, e) => {
val l = s._2.dropWhile(_ != e)
(s._1 && l.nonEmpty, l)
})
println(res._1)