Scala 由生成的集合类型,收益率为

Scala 由生成的集合类型,收益率为,scala,scala-2.8,scala-collections,Scala,Scala 2.8,Scala Collections,当我在Scala中为计算一个时,我得到一个不可变的索引eq(一个具有类似数组的性能特征的集合,例如有效的随机访问): scala>val s=for(i感谢michael.kebe的评论 解释如何将的转换为使用map、flatMap、filter和foreach的操作。因此,我的示例: val s = for (i <- 0 to 9) yield math.random + i 对集合执行的map等操作的结果类型取决于您调用它的集合。0到9的类型是一个范围。包含: scala>

当我在Scala中为计算一个
时,我得到一个不可变的
索引eq
(一个具有类似数组的性能特征的集合,例如有效的随机访问):


scala>val s=for(i感谢michael.kebe的评论

解释如何将
转换为使用
map
flatMap
filter
foreach
的操作。因此,我的示例:

val s = for (i <- 0 to 9) yield math.random + i
对集合执行的
map
等操作的结果类型取决于您调用它的集合。
0到9的类型是一个
范围。包含

scala> val d = 0 to 9
d: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
对其执行
map
操作的结果是
IndexedSeq
(因为集合库中有生成器)


所以,回答我的问题:(…)产量的
结果取决于偏执论中的类型。如果我想要一个
列表作为结果,我可以这样做:

scala> val s = for (i <- List.range(0, 9)) yield math.random + i
s: List[Double] = List(0.05778968639862214, 1.6758775042995566, ...

scala>val s=for(i您始终可以使用toList将范围转换为列表:

> val s = for (i <- (0 to 9).toList) yield math.random + i
> s  : List[Double]
>val s=for(is:List[Double]

看一看,在你的例子中,它被转换为map。如果你有一个用于理解的两个生成器,这将被转换为flatMap/map组合。因此对于(ij}}“取决于parantises中的类型”,更准确地说,它是决定类型的第一个右侧参数。
scala> val s = for (i <- List.range(0, 9)) yield math.random + i
s: List[Double] = List(0.05778968639862214, 1.6758775042995566, ...
> val s = for (i <- (0 to 9).toList) yield math.random + i
> s  : List[Double]