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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
foreach是否根据定义保证在Scala中按顺序迭代主题集合?_Scala_Collections_Foreach_Parallel Processing - Fatal编程技术网

foreach是否根据定义保证在Scala中按顺序迭代主题集合?

foreach是否根据定义保证在Scala中按顺序迭代主题集合?,scala,collections,foreach,parallel-processing,Scala,Collections,Foreach,Parallel Processing,根据定义,foreach是否保证从第一个元素到最后一个元素(除非意外中断)顺序迭代主题集合(如果它定义了顺序)?难道没有任何编译器优化开关可以阻止它(洗牌序列)或计划在将来的版本中使普通的foreach并行吗?foreach对于顺序集合(即,正常的层次结构,或对于.seq转换的任何东西)保证是顺序的。集合库的并行部分(通过.par或通过显式使用collection.parallel中的类从标准集合中获得)几乎可以保证不会按顺序计算。如果你想成为不可知论者,你可以使用GenX特征集(例如GenSe

根据定义,
foreach
是否保证从第一个元素到最后一个元素(除非意外中断)顺序迭代主题集合(如果它定义了顺序)?难道没有任何编译器优化开关可以阻止它(洗牌序列)或计划在将来的版本中使普通的
foreach
并行吗?

foreach对于顺序集合(即,正常的层次结构,或对于
.seq
转换的任何东西)保证是顺序的。集合库的并行部分(通过
.par
或通过显式使用
collection.parallel
中的类从标准集合中获得)几乎可以保证不会按顺序计算。如果你想成为不可知论者,你可以使用
GenX
特征集(例如
GenSeq
);这些不保证执行顺序,也不保证工作将并行完成。

为了补充Rex的答案,
foreach
at
GenTraversableOnce
仅保证所有元素都将被迭代,除非您中断它。层级链中较低的特征可能提供额外的保证,例如:

  • TraversableOnce
    和子代保证一次只遍历一个元素(GenTraversableOnce不保证)
  • Seq
    和子体保证按元素在集合中保留的顺序遍历元素
既然你问了关于并行的foreach

scala> (1 to 10).par foreach println
4
6
1
3
2
7
5
8
9
10