列表中的Scala重复元素

标签 scala list-comprehension

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

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/

相关文章:

java - Scala 的 BDD 工具支持可重用的参数化 Gherkin 子句

scala - Play Framework 2.0 和 Selenium 入门

python - 将两个列表合并为一个列表,其中它们共享相同的值,并使用列表理解删除重复项

python - 从字符串创建两个列表,排除和包含括号之间的字符串

python - 这个函数必须使用 reduce() 还是有更多的 pythonic 方式?

scala - 在 Scala 中,有没有办法让两个重载方法仅在隐式是否可用方面有所不同?

list - scala:从列表生成元组

scala - 所有子类型的隐式处理器

python - 在嵌套列表中查找大量数据python

python - 如何在两个列表中查找匹配项的索引