scala编程第16章学习笔记(1)

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,因此他们可以应用到各种可枚举的集合类上。

 

posted @ 2014-11-11 15:47  ~风轻云淡~  阅读(5174)  评论(0编辑  收藏  举报