加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 由收益产生的收集类型

发布时间:2020-12-16 09:35:54 所属栏目:安全 来源:网络整理
导读:当我在Scala中进行评估时,我得到了一个不可变的IndexedSeq(一个具有阵列性能特征的集合,如高效的随机存取): scala val s = for (i - 0 to 9) yield math.random + is: scala.collection.immutable.IndexedSeq[Double] = Vector(0.6127056766832756,1.7137
当我在Scala中进行评估时,我得到了一个不可变的IndexedSeq(一个具有阵列性能特征的集合,如高效的随机存取):

scala> val s = for (i <- 0 to 9) yield math.random + i
s: scala.collection.immutable.IndexedSeq[Double] = Vector(0.6127056766832756,1.7137598183155291,...

一个for yield是否总是返回一个IndexedSeq,或者也可以返回一些其他类型的集合类(例如LinearSeq)?如果它还可以返回别的东西,那么什么决定了返回类型,我该如何影响呢?

我正在使用Scala 2.8.0.RC3。

解决方法

感谢michael.kebe你的评论。

This解释了如何使用map,flatMap,filter和foreach将其转换为操作。所以我的例子:

val s = for (i <- 0 to 9) yield math.random + i

被翻译成这样的东西(在这种情况下,我不知道是否将其翻译成mapMap或flatMap):

val s = (0 to 9) map { math.random + _ }

结果类型,如集合上的映射取决于您所调用的集合。 0到9的类型是Range.Inclusive:

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)

地图操作的结果是IndexedSeq(因为集合库中的构建器内容)。

所以,回答我的问题:一个for(…)yield的结果取决于paranthes中的什么类型。如果我想要一个列表作为结果,我可以这样做:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读