循环
注意:scala没有++这个操作符
scala> val s = "hello123";s: String = hello123scala> for (c <- s) println(c)
for里面的就是把s遍历出来的元素赋值给c
<- 规定 to, 前后闭合
表达式1-10循环
for (i <- 1 to 10)println(i)
循环数组
# val arr = Array[String](_"a"_ "b"_ "c")val arr = Array("a", "b", "c")for (i <- arr)println(i)
高级循环,带if
每个生成器都可以带一个条件,注意: if前面没有分号
for (i <- 1 to 3 if i != 2) {println(i + " ")}// 类似for (i <- 1 to 3) {if (i != 2) {println(i + " ")}}
循环步长
by表示步长
for (i <- 1 to 10 by 2) {println(i + " ")}
嵌套循环
没有关键字,所以范围后一定要加;来隔断逻辑
for (i <- 1 to 3; j <- 1 to 3) {println("i = " + i + " j = " + j)}//类似for (i <- 1 to 3) {for (j <- 1 to 3) {println("i = " + i + " j = " + j)}}
引入变量
for (i <- 1 to 3; j = 4 -i) {println("i = " + i + " j = " + j)}输出i = 1 j = 3i = 2 j = 2i = 3 j = 1
- for 推导式一行中有多个表达式时,所以要加 ;来隔断逻辑
- for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号, 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号,如下 ```scala for { i <- 1 to 3 j = 4 -i } { println(“i = “ + i + “ j = “ + j) }
等价于
for (i <- 1 to 3) { var j = 4 -i println(“i = “ + i + “ j = “ + j) }
<a name="CWt6P"></a>## 倒叙打印如果想倒序打印一组数据,可以用 reverse```scalafor (i <- 1 to 3 reverse) {println("i = " + i)}
for推导式, yield
如果for循环的循环体以yield开始,则该循环会构建出一个集合
每次迭代生成集合中的一个值
将遍历过程中处理的结果返回到一个新 Vector 集合中,使用 yield 关键字。
在Scala中for循环是和yield一起使用的,他的形式是for (enumerators) yield e。 此处 enumerators 指一组以分号分隔的枚举器。这里的enumerator 要么是一个产生新变量的生成器,要么是一个过滤器。for 表达式在枚举器产生的每一次绑定中都会计算 e 值,并在循环结束后返回这些值组成的序列
val v = for (i <- 1 to 10) yield i * 10println(v)Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
util包左不包右
val a = Array("a", "b", "c")for(i <- 0 util a.length) println(a(i))
//这种方式和前面的区别在于 i 是从 1 到 3-1for (i <- 1 until 3) {println(i + " ")}
while循环中断
Scala 内置控制结构特地去掉了break和continue,是为了更好的适应函数式编程,推 荐使用函数式的风格解决 break 和 continue 的功能,而不是一个关键字。Scala 中使用 breakable 控制结构来实现 break 和 continue 功能。
import scala.util.control.Breaksval loop = new Breaksvar n = 1loop.breakable{while(n<=20) {n+=1;println(n)if(n == 18) {loop.break()}}}
for循环中断
import scala.util.control.BreaksBreaks.breakable(for (i <- 1 to 10) {println("i = " + i)if (i == 5) Breaks.break()})
对break进行省略
import scala.util.control.Breaks._breakable(for (i <- 1 to 10) {println("i = " + i)if (i == 5) break()})
continue
for(i<-0 until 10){breakable{if(i==3||i==6) {break}println(i)}}//0,1,2,3,5,7,8,9
多重while循环
import scala.util.control.Breaksval loop1 = new Breaksval loop2 = new Breaksvar count = 1loop1.breakable {while (true) {count += 1println(count)if (count == 10) {loop1.break()}loop2.breakable {while (true) {println(count)count += 1if (count == 20) {loop2.break()}}}}}
迭代修改值
val list = List((1, "a"), (2, "a"), (3, "c"))val list2 = list.map { case (a, b) => (a + 1, b + "zy") }println(list2)
