scala之for循环
scala之for循环的几种方式
第一种
i 表示循环的变量, <- 规定好 to 规定
i 将会从 1-3 循环, 前后闭合
for(i <- 1 to 3){
print(i + " ")
}
第二种
这种方式和前面的区别在于 i 是从1 到 3-1
前闭合后开的范围,和java的arr.length() 类似
for(i <- 1 until 3) {
print(i + " ")
}
第三种(循环守卫)
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
这个代码等价于
for (i <- 1 to 3) {
if (i != 2) {
println(i+"")
}
}
第四种(引入变量)
for(i <- 1 to 3; j = 4 - i) {
print(j + " ")
}
没有关键字,所以范围后一定要加;来隔断逻辑
上面的代码等价
for ( i <- 1 to 3) {
val j = 4 –i
print(j+"")
}
第五种(嵌套循环)
for(i <- 1 to 3; j <- 1 to 3) {
println(" i =" + i + " j = " + j)
}
上面的代码等价于
for ( i <- 1 to 3) {
for ( j <- 1to 3){
println(i + " " + j + " ")
}
}
第六种(循环返回值)
将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字
val res = for(i <- 1 to 10) yield i
println(res)
第七种(会用花括号代替小括号)
{}和()对于for表达式来说都可以
for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号
当使用{} 来换行写表达式时,分号就不用写了
for(i <- 1 to 3; j = i * 2) {
println(" i= " + i + " j= " + j)
}
注意
scala中去掉了break和continue,所以需要专门的中断语句去执行
break()函数替代break,用breakable()将代码块包起来,可以让break()函数后的代码可以继续执行
循环守卫替代continue
import util.control.Breaks._
object Demo {
var n = 1;
while (true){
n += 1
if (n === 18){
//在scala中使用函数式的break函数中断循环
//def break(): Nothing = { throw breakException }
//这样就导致后面的代码不会被执行,这时可以用breakable去处理
break();
}
}
}
import util.control.Breaks._
object WhileBreak {
def main(args: Array[String]): Unit = {
var n = 1
//breakable()函数
//说明
//1. breakable 是一个高阶函数:可以接收函数的函数就是高阶函数
//2. def breakable(op: => Unit) {
// try {
// op
// } catch {
// case ex: BreakControl =>
// if (ex ne breakException) throw ex
// }
// }
// (1) op: => Unit 表示接收的参数是一个没有输入,也没有返回值的函数
// (2) 即可以简单理解可以接收一段代码块
// 3. breakable 对break()抛出的异常做了处理,代码就继续执行
// 4. 当我们传入的是代码块,scala程序员会将() 改成{}
breakable {
while (n <= 20) {
n += 1
println("n=" + n)
if (n == 18) {
// 使用函数式的break函数中断循环
break()
}
}
}
}
}
使用循环守卫终端
var loop = true
var sum2 = 0
for (i <- 1 to 100 if loop == true) {
sum2 += i
if (sum2 > 20) {
println("循环守卫实现中断 第一次大于20的当前数=" + i)
loop = false
}
println("i=" + i)
}
使用循环守卫控制步长
for (i <- Range(1,10,2)){
println(s"i=${i}")
}
for (i <- 1 to 10 if i % 2 == 1) {
println("i=" + i)
}
总结
scala 的for循环形式和java是较大差异,这点请注意,但是基本的原理还是一样的。
1、Scala里面没有++ --的操作,如果非要实现类似的操作,那么使用的是 a -= 1操作
2、for循环的语法是 (for <- 表达式/集合/数组,常用的表达式 1 to 10 或 1 until 10 )
3、for循环支持多重for循环,可以写if条件表达式,并且表达式之前没有分号
4、for循环有返回值或者返回来一个新的集合在循环体前使用关键字yield
5、for循环中断用breakable高阶函数
欢迎关注全栈开发私房菜,每天进步一点点
长按二维码关注【全栈开发私房菜】