33.scala编程思想笔记——推导
来源:互联网 发布:哈佛 知乎 编辑:程序博客网 时间:2024/06/18 07:10
33.scala编程思想笔记——推导
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50445783
源码下载连接请见第一篇笔记。
For和if的组合,称为for推导,简称推导。
在scala中推导将 生成器、过滤器和定义组合在一起。
返回偶数,大于5的方法如下:
import com.atomicscala.AtomicTest._
def evenGT5(v:Vector[Int]):Vector[Int] = {
// 'var' sowe can reassign 'result':
var result =Vector[Int]()
for {
n <- v
if n > 5
if n % 2 ==0
} result =result :+ n
result
}
val v = Vector(1,2,3,5,6,7,8,10,13,14,17)
evenGT5(v) is Vector(6, 8, 10, 14)
输出如下:
Vector(6, 8, 10, 14)
使用{} 可以使得for可以包含多条语句或表达式。
也可以将result用作val,不过可以使用yield关键字,当声明yield n时,会把值n交出来。
如下:
import com.atomicscala.AtomicTest._
def yielding(v:Vector[Int]):Vector[Int]={
val result =for {
n <- v
if n <10
if n % 2 !=0
} yield n
result
}
val v = Vector(1,2,3,5,6,7,8,10,13,14,17)
yielding(v) is Vector(1, 3, 5, 7)
yield总是会填充容器,对result赋值之前创建完整的Vector.这样result就可以是val而不是var.
与其他任何表达式一样,yield表达式也可以组合,如下:
import com.atomicscala.AtomicTest._
def yielding3(v:Vector[Int]):Vector[Int]={
for {
n <- v
if n <10
isOdd = (n% 2 != 0)
if(isOdd)
} yield {
val u = n *10
u + 2
}
}
val v = Vector(1,2,3,5,6,7,8,10,13,14,17)
yielding3(v) is Vector(12, 32, 52, 72)
可以让一个推导只与一个yield表达式相关联,并且不能将yield表达式置于推导体之前。但是推导可以嵌套如下:
import com.atomicscala.AtomicTest._
def yielding4(v:Vector[Int]) = {
for {
n <- v
if n <10
isOdd = (n% 2 != 0)
if(isOdd)
} yield {
for(u <-Range(0, n))
yield u
}
}
val v = Vector(1,2,3,5,6,7,8,10,13,14,17)
yielding4(v) is Vector(
Vector(0),
Vector(0, 1,2),
Vector(0, 1,2, 3, 4),
Vector(0, 1,2, 3, 4, 5, 6)
)
每个yield都会产生一个Vector,最终结果是一个Vector的Vector.
- 33.scala编程思想笔记——推导
- 2.scala编程思想笔记——运行Scala
- 3.scala编程思想笔记——编写脚本
- 4.scala编程思想笔记——值
- 5.scala编程思想笔记——数据类型
- 6.scala编程思想笔记——变量
- 7.scala编程思想笔记——表达式
- 8.scala编程思想笔记——条件表达式
- 9.scala编程思想笔记——计算顺序
- 10.scala编程思想笔记——组合表达式
- 11.scala编程思想笔记——方法
- 12.scala编程思想笔记——类和对象
- 13.scala编程思想笔记——ScalaDoc
- 14.scala编程思想笔记——创建类
- 15.scala编程思想笔记——类中的方法
- 16.scala编程思想笔记——导入和包
- 17.scala编程思想笔记——测试
- 18.scala编程思想笔记——域
- 31.scala编程思想笔记——作为对象的函数
- online_judge_1156
- 32.scala编程思想笔记——map和reduce
- online_judge_1157
- CentOS下安装PYTHON
- 33.scala编程思想笔记——推导
- 34.scala编程思想笔记——基于类型的模式匹配
- Linux下安装redis
- 35.scala编程思想笔记——基于case类的模式匹配
- 用正则匹配出一段文章中的img标签
- 36.scala编程思想笔记——简洁性
- 使用spark访问elasticsearch的数据
- Python安装easy_install报错的处理方式
- apache使用fastcgi配置python和php