Scala學習三:循環
Scala 循環
Scala中有for,while兩種形式
while循環的方式與Java中的一樣,不再贅述.
Scala中沒有Java的
for(變量聲名; 條件控制; 變量控制)
只有
for(n <- 1 to n)
// 包含n值
// 及
for(n <- 1 until n)
// 不包含n值
Scala for循環中的變量名前不需要val,var。類型是集合中的變量類型。作用域鬱着循環結束。
Scala中沒有break, continue來退出,控制循環.
import scala.util.control.Breaks._
breakable {
for (...) {
if (...) {
break
}
}
}
breakable 必須完全包裹住整個for循環塊,否則將不能退出循環。
break 跳出循環是通過拋出 和 捕獲 異常來完成的。對於時間要求很高的情況,應減少使用。
高級for循環形式:
Scala的for循環可以有多個 變量<-表達式 形式的生成器,每個生成器之間用 “;” 隔開
// Scala代碼
for(outer <- 1 to 3; inner <- 1 to 3){
println(10 * outer + inner)
}
// Java代碼
// 其作用就相當於Java的雙層for循環
for(int outer = 1; outer <= 3; outer++){
for(int inner = 1; inner <= 3; inner++){
System.out.println( 10 * outer + inner)
}
}
for循環生成器守衛:
// Scala代碼:
// 同時每個生成器可以帶一個守衛:
for(outer <- 1 to 5 if outer % 2 != 0; inner <- 1 to 5 if inner % 2 == 0){
println(10 * outer + inner)
}
其作用就相當於Java的雙層for循環:
// Java代碼:
for(int outer = 1; outer <= 5; outer++){
if(outer % 2 != 0){
for(int inner = 1; inner <= 5; inner++){
if(inner % 2 == 0){
System.out.println( 10 * outer + inner)
}
}
}
}
而且還可以使用任意多的定義,引用可以在循環中使用的變量:
for(outer <- 1 to 5; middle = 6 - outer ; inner <- middle to 5) {
println(10 * outer + inner)
}
for yield:
如果For循環體內以yield開始,則循環會構成一個集合,每次迭代生成集合中的一個值
val col = for(a < 1 to 5) yield {
"Word" + a
}
// col是一個集合:IndexedSeq[String]
錯誤的寫法,如果返回集合。yield必須緊跟for循環表達式。
for(a < 1 to 5){
yield {
"Word" + a
}
}