Scala常用方法大全(附程式碼案例)
1.flatten
可以把巢狀的結構展開.
scala> List(List(1,2),List(3,4)).flatten res0: List[Int] = List(1, 2, 3, 4)
2、flatmap
flatMap結合了map和flatten的功能。接收一個可以處理巢狀列表的函式,然後把返回結果連線起來。
scala> List(List(1,2),List(3,4)).flatMap(x=>x.map(x=>x*2)) res5: List[Int] = List(2, 4, 6, 8)
3.filter
濾除掉使函式返回false的元素
scala> def isEven(i: Int): Boolean = i % 2 == 0 isEven: (i: Int)Boolean scala> List(1,2,3,4).filter(isEven _) res6: List[Int] = List(2, 4)
4.zip
zip方法將兩個集合結合在一起
scala> List('a,'b,'c).zip(List(1,2,3)) res32: List[(Symbol, Int)] = List(('a,1), ('b,2), ('c,3))
5.zipWithIndex
將元素和下標結合在一起
scala> List(2,3,4,5).zipWithIndex res33: List[(Int, Int)] = List((2,0), (3,1), (4,2), (5,3))
6、foreach
foreach和map相似,只不過它沒有返回值,foreach只要是為了對引數進行作用。
比如 names.foreach{name=>println(name)}
7.mkString 方法
scala通過mkString方法把一個集合轉化為一個字串
使用mkString方法來列印一個集合內容,下面給一個簡單的例子:
-
scala> val a = Array("apple", "banana", "cherry")
-
a: Array[String] = Array(apple, banana, cherry)
-
scala> a.mkString
-
res3: String = applebananacherry
使用mkString方法你會看到結果並不漂亮,我們來加一個分隔符:
-
scala> a.mkString(",")
-
res4: String = apple,banana,cherry
-
scala> a.mkString(" ")
-
res5: String = apple banana cherry
這樣看起來就好看多了,同樣你可以新增一個字首和一個字尾:
-
scala> a.mkString("[", ", ", "]")
-
res6: String = [apple, banana, cherry]
如果你想把一個巢狀集合轉化為一個字串,比如巢狀陣列,首先你要展開這個巢狀陣列,然後呼叫mkString方法:
-
scala> val a = Array(Array("a", "b"), Array("c", "d"))
-
a: Array[Array[String]] = Array(Array(a, b), Array(c, d))
-
scala> a.flatten.mkString(",")
-
res7: String = a,b,c,d
陣列常用演算法:
scala> val arr=Array(1,2,3,4,5,6,7,8,9) arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) scala> arr.sum res29: Int = 45 scala> arr.max res30: Int = 9 scala> arr.min res31: Int = 1 scala> arr.toString() res32: String = [[email protected] scala> arr.mkString("#") res33: String = 1#2#3#4#5#6#7#8#9 scala> arr.mkString("<",",",">") res34: String = <1,2,3,4,5,6,7,8,9>
序列類--List
val list1=List(1,2,3)
//將0插入到list1的前面生成一個新的List 0,1,2,3
val lst2=0 :: list1
val lst3=list1 .:: (0)
val lst4=0 +: list1
val lst5=list1 .+: (0)
//將一個4新增到List1的後面產生一個新的集合 1,2,3,4
val lst6=list1 :+ 4
val list2=List(4,5,6)
//將兩個List合併成一個新的List
val lst7=list1 ++ list2 //1,2,3,4,5,6
//將list2放到list1後面生成一個新的集合
val lst8= list1 ++: list2
//將list2插入到list1前面生成一個新的集合
val lst9=list1 .::: (list2)
-
::
該方法被稱為cons,意為構造,向佇列的頭部追加資料,創造新的列表。用法為x::list
,其中x
為加入到頭部的元素,無論x
是列表與否,它都只將成為新生成列表的第一個元素,也就是說新生成的列表長度為list的長度+1(btw,x::list
等價於list.::(x)
) -
:+
和+:
兩者的區別在於:+
方法用於在尾部追加元素,+:
方法用於在頭部追加元素,和::
很類似,但是::
可以用於pattern match ,而+:
則不行. 關於+:
和:+
,只要記住冒號永遠靠近集合型別就OK了。 -
++
該方法用於連線兩個集合,list1++list2
-
:::
該方法只能用於連線兩個List型別的集合
//判斷是否為空
scala>list1.isEmpty
res108:Boolean=false
//取第一個元素
scala>list1.head
res109:Int=1
//取除了第一個元素剩餘的元素,返回的是列表
scala>list1.tail
res110:List[Int]=List(2,3,4)
//取列表第二個元素
scala>list1.tail.head
res111:Int=2
//插入排序演算法實現
def isort(xs : List[Int]) : List[Int]=
if( xs.isEmpty ) Nil
else insert( xs.head , isort(xs.tail))
def insert(x : Int,sx : List[Int]) : List[Int]=
if( xs.isEmpty || x<=xs.head) x :: xs
else xs.head :: insert(x,xs.tail)
//List 連線操作
scala>List(1,2,3) ::: List(4,5,6)
res123:List[Int]=List(1,2,3,4,5,6)
//取除最後一個元素外的元素,返回的是列表
scala>list1.init
res124:List[Int]=List(1,2)
//取列表最後一個元素
scala>list1.last
res125:Int=3
//列表元素倒置
scala>list1.reverse
res126:List[Int]=List(3,2,1)
//一些好玩的方法呼叫
scala>list1.reverse.reverse == list1
res127:Boolean = true
scala>list1.reverse.init
res128:List[Int]=List(3,2)
scala>list.tail.reverse
res129:List[Int]=List(3,2)
//丟棄前n個元素
scala>list1 drop 2
res130:List[Int]=List(3)
//獲取前n個元素
scala>list1 take 1
res131:List[Int]=List(1)
//將列表進行分割
scala>list1.splitAt(2)
res1: (List[Int], List[Int]) = (List(1, 2),List(3))
//前一個操作與下列語句等同
scala>(list1.take(2),list1.drop(2))
res3: (List[Int], List[Int]) = (List(1, 2),List(3))
//Zip操作
scala>val nums=List(1,2,3,4)
scala>val chars=List('1','2','3','4')
scala>nums zip chars
res4: List[(Int, Char)] = List((1,1), (2,2), (3,3), (4,4))
//List toString 方法
scala>list1.toString
res1:String=List(1,2,3)
//List mkString方法
scala>list1.mkString
res1:String=123
//轉化成陣列
scala>list1.toArray
res1:Array[Int]=Array(1,2,3)