最近在做一個spark項目,順便分享一下我的Scala入門過程。這一系列文章假定讀者有一定的java或者其他面向對象程式設計語言基礎。本文主要簡單介紹Scala的集合類型,包括Array,Tuple和Map。
照例先上一段代碼
注:ITEYE不支援Scala文法高亮,是以為了看起來友善,我選擇作為Java來展示。
object TestScala3 {
def main(args: Array[String]): Unit = {
val tuple = (1, "two", "three", true)
println(tuple._1)
println(tuple._2)
val array = Array(1, "two", "three", true)
for (i <- 0 until array.length) {
println(array(i))
}
for (item <- array) println(item)
val map = Map(1 -> "one", "two" -> 2, true -> "true")
for ((k, v) <- map) println("key = " + k + ", value = " + v)
for ((_, v) <- map) println("value = " + v)
println(map.get(1))
println(map.get(3))
}
}
第一個例子,我們建立了一個4個元素的tuple,并列印出它的前兩個元素。tuple是一個元組,它可以包含若幹個不同類型的元素(在Scala2.8之後,Array和List也支援不同類型的元素)。在取用tuple中的元素時,使用下劃線加index的文法,但注意,與其他集合不同,tuple的index是從1開始的,實際上當你嘗試寫tuple._0時,會有得到編譯錯誤“value _0 is not a member of (Int, String, String, Boolean)”, 并沒有0這個下标。另外我們也從編譯錯誤資訊中看到,Scala具備類型推導的能力,它能夠知道元組中的每個元素的類型。
在Java的函數中,如果我們想傳回多個值,隻能建立一個POJO去接,或者把傳回值寫入參數傳入的引用中,非常麻煩,但在Scala中我們使用tuple就非常友善。
第二個例子,我們生命了一個Array,周遊并列印出Array中的每個元素。這裡我們用到0until N,在上篇中我們寫過0 to N,他們的差別在于until是一個前閉後開的函數,并不包括N,而to包括。
第三個例子,map儲存的是鍵值對,用->聲明。周遊時,把map中的每個鍵值對指派給一個兩個元素的tuple,再将這個tuple的兩個元素列印出來。如果我們隻關心map中的key或者value,我們可以使用占位符(_)來替代不關心的元素。