我是Scala的新手。
我有一份清单 origList = List [Double]包含数千个元素。 我需要创建另一个列表 outList =列表[双] 并从origList复制带索引的元素 开始,开始+ 1,...,开始+ nCopy-1 那就是输出列表将有nCopy元素。
这部分代码将被执行多次。在Scala中最有效的方法是什么?
答案 0 :(得分:3)
人们通常在scala中执行此操作的方式是list.slice(start, start+nCopy)
。
注意,scala中的List
不像ArrayList
这样的随机访问容器在java中。它是作为一个链表实现的,所以,特别是,如果你打算多次这样做,如果你把你的列表转换成手前索引的东西,它会有很大的帮助:val converted = list.toIndexedSeq
或者更好,{{1 }}。
val converted = list.toArray
或.slice
上的 Array
效率会更高,尤其是IndexedSeq
索引较高时。
现在,如果你真的关注效率,那么这一项操作,没有(不幸的是)胜过古老的Java方法:
start
当复制足够多(数百)个元素时,这可以数量级比val converted = list.toArray
val copied = java.util.Arrays.copyOfRange(converted, start, start+nCopy)
(单独留下converted.slice
)快。