Scala之流程控制語句for迴圈

2021-10-10 04:45:43 字數 3999 閱讀 7345

for迴圈本質是一種遍歷,遍歷集合中的每個元素,當遍歷完最後乙個元素的時候,自動終止.

val a =

"abc"

// 字串

// 遍歷容器. 變數c是常量, 不能修改

for(c <- a)

結果

a

bc

字元相加就變成int型別了

val a =

"abc"

// 字串

// 遍歷容器. 變數c是常量, 不能修改

for(c <- a)

97

9899

三種寫法

// 使用for輸出 1-10

// 1.to(10) 是獲取到1~10的容器,簡寫是 1 to 10

for(i <-

1.to(10)

)

//大於等於1,小於11

for(i <-

1 until 11

)

for

(i <-

1 to 10

)

得到的結果就是迴圈遍歷1~10

123

4567

8910

// 使用for輸出 1-10的所有奇數

for(i <-

1 to(10,

2))//上面的簡寫

for(i <-

1 to 10 by 2

)

輸出

135

79

// 使用for輸出 10-1

for(i <-

1 to 10 reverse)

另外一種寫法

for

(i <-

10 to 1 by -1)

輸出:

1098

7654

321

保護式為true則進入迴圈體內部,為false則跳過,類似於continue。

輸出1-10所有的奇數,如果i % 2 == 1 成立的話就輸出

for

(i <-

1 to 10

if i %2==

1)}

另外一種寫法,更簡潔,但是我感覺可讀性似乎變差.

for

(i <-

1 to 10

if i %2==

1)

135

79

輸出1~100 的偶數 , j 是 兩個i 相乘 ,只有j小於10000的時候輸出j,如果j大於10000就不輸出j

下面兩個**片段結果是乙個結果,但是乙個精簡了,但是可讀性差了,乙個不精簡,但是可讀性好…

for

(i <-

1 to 100)}

}

for

(i <-

1 to 100

if i %2==

0; j = i * i if j <

10000

)

scala內建控制結構特地去掉了break和continue,是為了更好的適應函式式程式設計,推薦使用函式式的風格解決break和continue的功能,而不是乙個關鍵字。scala中使用breakable控制結構來實現break和continue功能。

不過這種方式效能不是特別好,點開看原始碼是自己丟擲異常自己捕獲的.

break

迴圈遍歷10以內的所有資料,數值為5,結束迴圈(break)

import scala.util.control.breaks

object for3 }}

println(

"exit")}

}

輸出

n=1

n=2n=3

n=4exit

continue

迴圈遍歷10以內的所有資料,奇數列印,偶數跳過(continue)

import scala.util.control.breaks

object for3

else}}

}}

輸出

1

continue

3continue

5continue

7continue

9continue

(1)break:breakable放在迴圈外

(2)continue:breakable放在迴圈內

(1)將乙個迴圈放在另乙個迴圈體內,就形成了巢狀迴圈。其中,for,while,do…while均可以作為外層迴圈和內層迴圈。【建議一般使用兩層,最多不要超過3層】

(2)實質上,巢狀迴圈就是把內層迴圈當成外層迴圈的迴圈體。當只有內層迴圈的迴圈條件為false時,才會完全跳出內層迴圈,才可結束外層的當次迴圈,開始下一次的迴圈。

(3)設外層迴圈次數為m次,內層為n次,則內層迴圈體實際上需要執行m*n次。

下面兩個**片段是乙個作用,還是建議用第二種

第一種

for

(i <-

1 to 9

; j <-

1 to i)

\t")

if(i == j) println()}

}

第二種

for

(i <-

1 to 9

)\t")}

println(

)}

輸出:

1 * 1 = 1	

1 * 2 = 2 2 * 2 = 4

1 * 3 = 3 2 * 3 = 6 3 * 3 = 9

1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16

1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25

1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36

1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49

1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64

1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81

基本語法

val res = for(i <- 1 to 10) yield i

println(res)

說明:將遍歷過程中處理的結果返回到乙個新vector集合中,使用yield關鍵字,如果迴圈裡面是多行**的話,那麼就返回最後一行**的值

案例: 將原資料中所有值乘以2,並把資料返回到乙個新的集合中。

var res =

for(i <-

1 to 10

)yield

println(res)

輸出結果

vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)

Mysql之流程控制語句

這篇部落格主要是總結一下mysq中的流程控制語句的用法,主要是 case,if,ifnull,nullif 1.case case value when compare value then result when compare value then result else result end ...

PL SQL之 流程控制語句

一 簡介 像程式語言一樣,oracle pl sql也有自己的流程控制語句。通過流程控制語句,我們可以在pl sql中實現一下比較複雜的業務邏輯操作。而無需到程式中去控制,在一定程度上提高了效率,這也是pl sql的強大之處。pl sql流程控制語句有如下幾種 二 語句種類 1 控制語句 a if語...

shell 之 流程控制語句if

if 條件 then commands fi bin bash ifls shell then echo there is a dir named shell fi執行結果 注 根據我們命令退出的碼來進行判斷 是否為 0 如果是0,那麼就會執行then後面的命令 if 條件 then command...