List列表的基本操作
head方法獲得列表的第一個元素
tail方法獲得列表除第一個元素之外的其它元素
isEmpty:判斷列表是否為空,空的話返回真
last:獲得列表最后一個元素
init:獲得除最后一個元素之外的元素
reverse:反轉列表
前綴與后綴:drop、take、splitAt
xs take n 返回xs列表的前n個元素,如果n大於xs.length,則返回整個xs。
xs drop n 返回xs列表除前n個元素之外的所有元素,如果n大於xs.length,則返回空列表。
splitAt操作在指定位置拆分列表,並返回對偶列表。
xs splitAt n等價於(xs take n, xs drop n)
例子如下:
scala> List(1, 2, 3, 4, 5) take 2 res2: List[Int] = List(1, 2) scala> List(1, 2, 3, 4, 5) drop 2 res3: List[Int] = List(3, 4, 5) scala> List(1, 2, 3, 4, 5) splitAt 2 res4: (List[Int], List[Int]) = (List(1, 2),List(3, 4, 5))
元素選擇:apply方法和indices方法
apply方法實現了隨機元素的選擇,與其它類型一樣,當對象出現在應該是方法調用的函數位置上時,就會隱式地插入apply方法
scala> val abcde=List('a' ,'b', 'c', 'd', 'e') abcde: List[Char] = List(a, b, c, d, e) scala> abcde apply 2 res7: Char = c scala> abcde(2) res8: Char = c
xs apply n 等價於 (xs drop n).head
indices方法可以返回指定列表的所有有效索引值組成的類表:
scala> abcde.indices
res9: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4)
嚙合列表:zip
zip操作可以把兩個列表組成一個對偶列表:
scala> abcde.indices zip abcde
res10: scala.collection.immutable.IndexedSeq[(Int, Char)] = Vector((0,a), (1,b),(2,c), (3,d), (4,e))
如果兩個列表的長度不一致,那么任何不能匹配的元素將被丟掉:
scala> abcde zip List(1, 2, 3)
res11: List[(Char, Int)] = List((a,1), (b,2), (c,3))
zipWithIndex把列表元素與索引值嚙合在一起
scala> abcde.zipWithIndex
res12: List[(Char, Int)] = List((a,0), (b,1), (c,2), (d,3), (e,4))
顯示列表:toString方法和mkString方法
toString操作返回列表的標准字符串表達形式:
scala> abcde.toString
res13: String = List(a, b, c, d, e)
如果需要其他表達形式,可以使用mkString方法。xs mkString(pre, sep, post)
其中pre是需要在顯示的元素之前的前綴字符串,sep為兩個元素之間的分割字符串,post為顯示在最后面的后綴字符串。
xs.mkString 等價於 xs mkString("", sep, "")
xs.mkString 等價於 xs mkString ""
scala> abcde mkString ("[", ",", "]") res15: String = [a,b,c,d,e] scala> abcde mkString "" res17: String = abcde scala> abcde.mkString res19: String = abcde scala> abcde mkString ("List(", ", ", ")") res20: String = List(a, b, c, d, e)
mkString方法還有名為addString的變體,它可以把構建好的字符串添加到StringBuilder對象中,而不是作為結果返回:
scala> val buf = new StringBuilder buf: StringBuilder = scala> abcde addString (buf, "(", ";", ")") res21: StringBuilder = (a;b;c;d;e)
mkString和addString方法都繼承自List的超特質Iterable,因此他們可以應用到各種可枚舉的集合類上。