找到重复的scala时拆分列表

前端之家收集整理的这篇文章主要介绍了找到重复的scala时拆分列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Scala中有一个元素列表,我正在寻找一种在找到重复项时拆分列表的方法.

例如:List(x,y,z,e,r,g,a)将被转换为List(List(x,r),List(y,a))
或列表(x,x,z)到列表(x,z),列表(x,z)
和列表(x,x)到列表(x,列表(y,x)

是否有一种比分别迭代和检查每个元素更有效的方法

解决方法

使用O(n)附加内存快速而脏的O(n):

import scala.collection.mutable.HashSet
import scala.collection.mutable.ListBuffer

val list = List("x","y","z","e","r","g","a","x","m","z")

var result = new ListBuffer[ListBuffer[String]]()
var partition = new ListBuffer[String]()

list.foreach { i => 
    if (partition.contains(i)) {
        result += partition
        partition = new ListBuffer[String]()
    }
    partition += i
}

if (partition.nonEmpty) {
    result += partition
}
result

ListBuffer(ListBuffer(x,ListBuffer(y,a,m,z))

猜你在找的Scala相关文章