Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在变异的可变集合上迭代_Scala_Scala Collections - Fatal编程技术网

Scala 在变异的可变集合上迭代

Scala 在变异的可变集合上迭代,scala,scala-collections,Scala,Scala Collections,它是指(通过.Iterator)在可变集合上获取迭代器的行为,修改集合,然后使用先前获得的定义良好的迭代器进行迭代?特别是对于可变.Map 通常,是否可以同时迭代和修改可变集合?我这里不是说多线程 我在Scala文档中找不到任何东西。在C++中,这种情况是很好定义的,它取决于容器的类型和在其上执行的操作类型。 < P>希望这有助于: val m = scala.collection.mutable.HashMap( 1 -> 1, 2 -> 2, 3 -> 3 )

它是指(通过
.Iterator
)在可变集合上获取
迭代器的行为,修改集合,然后使用先前获得的定义良好的迭代器进行迭代?特别是对于
可变.Map

通常,是否可以同时迭代和修改可变集合?我这里不是说多线程

我在Scala文档中找不到任何东西。在C++中,这种情况是很好定义的,它取决于容器的类型和在其上执行的操作类型。

< P>希望这有助于:

val m = scala.collection.mutable.HashMap(
  1 -> 1,
  2 -> 2,
  3 -> 3
)

val it1 = m.iterator
val it2 = m.iterator

println(it1.next)          // prints  (2,2)
println(it1.next)          // prints  (1,1)

m update(1, 4)

it1.foreach(println)      // prints  (3,3)
it2.foreach(println)      // prints  (2,2), (1,4) and (3,3)
对于HashMap,它是清晰的。如果您当然没有跳过更新的值(
it1
),则迭代器在更新(
it2
)后仍然有效

但是
LinkedList
ArrayBuffer
的行为完全不同

所以,是的,这种方法是有效的,不,不是像预期的那样无处不在。
我的建议是使用
map
foreach
,甚至省略可变结构。

我不太清楚结论是什么。大多数答案似乎都支持“是的,它会起作用”,但最后你说每个迭代器的工作方式不同,尽管有些迭代器似乎可以起作用,但一般来说,这不是你可以依赖的。因为问题是“[…]是否可以同时迭代和修改可变集合?”以及“获取迭代器[…],修改集合,然后使用先前获取的迭代器进行迭代的行为是否定义良好?”我的回答是“是,它可以工作”和“否,它没有定义好”“很公平,我给出了一些没人问的建议。我只是觉得这可能会有帮助。在这个例子中,这是可行的,但可能只是偶然的。我认为它没有很好的定义,所以不可靠,所以不应该这样做。我只是想知道某个集合是否承诺支持它,或者它只是未指定,所以风险很大。@ragazzojp在这一点上,我真的不知道它是如何指定的。特别是因为我主要处理不可变的问题。但我可以告诉你的是,即使是不可变的集合也没有很好的定义。