[英]How to iterate over a collection Future in scala and modify an existing record/variable?
[英]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.