我需要复制列表中的每个元素。
这是我想出的:
List.range(1,5).map(i => List(i,i)).flatten
哪个输出
List[Int] = List(1, 1, 2, 2, 3, 3, 4, 4)
我想知道这是否是最有效的方法(最终它需要在大量数据上运行),因为对于每个元素,都会创建一个新列表。
(以上是在 int 范围内,以保持示例简单)
有什么建议么?
最佳答案
一个更通用的解决方案是:
def duplicate[T](list: List[T]): List[T] = list.flatMap(x => List[T](x, x))
对于大型数据集,使用不可变的集合并不是那么高效。使用可变的
ListBuffer
的简单实现已经比上述速度快10倍(使用包含一百万个元素的列表):def duplicate[T](list: List[T]): List[T] = {
val buffer = collection.mutable.ListBuffer[T]()
list.foreach{ x =>
buffer += x
buffer += x
}
buffer.toList
}
这使用了一种通用技术,即附加到
ListBuffer
上以提高性能,然后最后转换为不可变的List
。
关于列表中的Scala重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254728/