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
atGenTraversableOnce
仅保证所有元素都将被迭代,除非您中断它。层级链中较低的特征可能提供额外的保证,例如:
和子代保证一次只遍历一个元素(GenTraversableOnce不保证)TraversableOnce
和子体保证按元素在集合中保留的顺序遍历元素Seq
scala> (1 to 10).par foreach println
4
6
1
3
2
7
5
8
9
10