首页 > 代码库 > scala编程第16章学习笔记(1)

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 2res2: List[Int] = List(1, 2)scala> List(1, 2, 3, 4, 5) drop 2res3: List[Int] = List(3, 4, 5)scala> List(1, 2, 3, 4, 5) splitAt 2res4: (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 2res7: Char = cscala> abcde(2)res8: Char = c

xs apply n 等价于 (xs drop n).head
indices方法可以返回指定列表的所有有效索引值组成的类表:

scala> abcde.indicesres9: scala.collection.immutable.Range = Range(0, 1, 2, 3, 4)

啮合列表:zip

zip操作可以把两个列表组成一个对偶列表:

scala> abcde.indices zip abcderes10: 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.zipWithIndexres12: List[(Char, Int)] = List((a,0), (b,1), (c,2), (d,3), (e,4))

显示列表:toString方法和mkString方法

toString操作返回列表的标准字符串表达形式:

scala> abcde.toStringres13: 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 = abcdescala> abcde.mkStringres19: String = abcdescala> abcde mkString ("List(", ", ", ")")res20: String = List(a, b, c, d, e)

mkString方法还有名为addString的变体,它可以把构建好的字符串添加到StringBuilder对象中,而不是作为结果返回:

scala> val buf = new StringBuilderbuf: StringBuilder =scala> abcde addString (buf, "(", ";", ")")res21: StringBuilder = (a;b;c;d;e)

mkString和addString方法都继承自List的超特质Iterable,因此他们可以应用到各种可枚举的集合类上。

 

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