1.只要函數不是遞歸的,我們就不需要寫返回值,但遞歸函數必須要寫返回值
2.for循環中 添加if守衛 加不加分號,意義不變
3.val x@y=1 ===> x:Int =1 y:Int =1 ,別問爲什麼,不知道
4.在使用val 定義數組的時候,如果沒有賦初值,則需要用
val a = new Array類型
如果要給數組賦初值,則不需要用new
val a = Array(“Hello”,“World”)
5.在4中所代表的數組應該是定長數組,使用變長數組時,應注意使用這兩種方法
val b = new ArrayBuffer[類型]
val b = ArrayBuffer類型 ========>括號內不需要定義數組長度
6.在使用數組時,可以用 trimStart 和 trimEnd 來移除元素
Array | ArrayBuffer | |
---|---|---|
定義數組 | val a = new Array類型 val a = Array(“Hello”,“World”) | val b=new ArrayBuffer[類型]val b = ArrayBuffer類型 |
增刪 | 不允許 | b.insert(下標,在下標之前插入)b.insert(2,6,7,8,9,4,10)===>在下標前插入多個值b.remove(下標)b.remove(下標,要移除的位數)b.trimStart(長度)b.trimEnd(長度)b+=,b-=,b++=,b–= |
7.在循環中,想讓數組中的元素每隔幾個一跳,可以用
for(i<- 0 until (a.length,n))===>n即爲要定義的跳數
8.在循環中,可以用下述方法來實現從尾端遍歷集合
for(i<- 0 until a.length,n).reverse
9.for推導式
val result = for(i<-a) yield 2*i>標準寫法
10.數組轉換
兩種轉化方式 | |
---|---|
for推導式 | val result = for(i<-a if i%2==0) yield 2*i |
filter | val result = a.filter(%2==0),map( 2* )甚至val result = a.filter(%2==0) map( 2 * ) |
11.另一種方式移除第一個負數之外的所有負數
var first = true
val indexes = for(i <-0 until a.length if first || a(i)>=0) yield { if (a(i)<0) first =false;i}
收集需要保留的下標
for (j <- 0 until indexes.length) a(j) = a(indexes(j))
將上述收集到的下標所在的元素移動去該去的位置
a.trimEnd(a.length-indexes.length)
12.變長參數
def sum(args:Int*)={
var result = 0
for(arg<- args) result +=arg
result
}
使用變長參數 ,可以在使用函數時,不限次數的傳遞參數,比起java中的構造函數方便不少
13.傳參傳遞值的序列
val s =sum(1 to 100 : _)
在一個序列後追加 :_* 可以將前面的序列當成一個參數列表,遍歷傳遞
13.懶值
當val被聲明爲lazy時,它的初始化將被推遲,直到我們首次對它取值。
lazy val words = scala.io.Source.fromFile(URI).mkString