gpt4 book ai didi

列表中的Scala重复元素

转载 作者:行者123 更新时间:2023-12-04 13:19:16 26 4
gpt4 key购买 nike

我需要复制列表中的每个元素。
这是我想出的:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com