簡體   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