我在
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))