繁体   English   中英

Scala:以随机顺序遍历集合,而无需创建副本

[英]Scala: iterate over collection in random order without creating a copy

Scala中是否有一种方法可以获取不可变集合(例如List或Vector)的流/视图/迭代器,该不可变集合将以随机顺序遍历该集合? 据我了解,Random.shuffle(coll)创建一个副本,但这不是一种节省内存的方法。 是Random.shuffle(coll.view)(还是coll.stream或coll.iterator)更好的方法? 这会造成明显的CPU开销吗? 还是有一些更合适的方法?

改组算法需要在集合中随机移动,并且需要以某种方式记住过去的选择。 不可变集合使用随机访问的速度不是很快O(1) List O(n)而不是O(1)Vector O(1)可以说是O(1) ,但是常数因子很大)。

相比之下,复制收藏几乎总是明智之举。

如果考虑到集合复制,请考虑将索引Array改组为感兴趣的Vector ,例如这样,

val myVector: Vector[MyObject] = ...

val shuffledIdx = util.Random.shuffle(0 until myVector.size)

这将复制一个Int序列,该序列可能比专用对象 然后

shuffledIdx.map { idx => task (myVector(idx)) }

以随机顺序迭代/映射myVector中的每个项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM