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

scala编程第16章学习笔记(1)的更多相关文章

  1. scala编程第16章学习笔记(3)——List类的高阶方法

    列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...

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

    转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ...

  3. scala编程第16章学习笔记(4)——List对象的方法

    通过元素创建列表:List.apply List(1, 2, 3) 等价于List.apply(1, 2, 3): scala> List.apply(1, 2, 3) res0: List[I ...

  4. scala编程第19章学习笔记(1)——类型参数化

    一.queues函数式队列 函数式队列是一种具有以下三种操作方式的数据结构: head 返回队列的第一个元素. tail 返回除第一个元素之外的队列. scala> import scala.c ...

  5. scala编程第18章学习笔记——有状态的对象

    银行账号的简化实现: scala> class BankAccount{ | private var bal: Int = 0 | def balance: Int = bal | def de ...

  6. scala编程第17章学习笔记(4)——元组

    元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...

  7. scala编程第17章学习笔记(3)

    可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...

  8. scala编程第17章学习笔记(2)——集和映射

    默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...

  9. scala编程第17章学习笔记(1)——集合类型

    列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...

随机推荐

  1. Java 类的继承详解

    /*文章中用到的代码只是一部分,需要完整代码的可通过邮箱联系我1978702969@qq.com*/ 在面向对象的语言中如C++和JAVA,都有一个比较重要的机制——类的继承.这里将对JAVA中的类的 ...

  2. zookeeper 节点启动时的更新机制

    使用zk的应用节点和zk数据本身的同步,当系统启动时使用zk配置的信息和zk本身存储不一致, 此时应存在一个更新机制将应用配置数据和zk数据更新一致. 启动时更新拉取zk配置中心的更新本地数据,以zk ...

  3. UI控件(ios)---UIImageView

    在实现网络异步存储中,突然发现对控件UIImageView有点生疏了,在这里复习一下. UIImageView,顾名思义是用来放置image的. 1.初始化UIImageView   UIImageV ...

  4. POJ 1151Atlantis 矩形面积并[线段树 离散化 扫描线]

    Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21734   Accepted: 8179 Descrip ...

  5. OS X - 在80端口启动Nginx

    不知道你是怎么在你的mac上安装nginx的,但是如果你跟我一样: brew install nginx 然后你会发现你的nginx.conf中的端口是8080. 于是你可能像我一样试着把端口改为80 ...

  6. ant design table column 设置width不生效解决方案

    当td里的内容超出了width的范围时,会出现width不固定,也就是width不生效 解决方案: 设置scroll的width等于所有列宽之和(scroll={{x: 100%}})

  7. 下载8000首儿歌的python代码

    下载8000首儿歌的python的代码: #-*- coding: UTF-8 -*- from pyquery import PyQuery as py from lxml import etree ...

  8. Revit API判断直线相交关系移动风管

    start )             );         )) )) );         XYZ xyz12 = lCurve1.Curve.get_EndPoint();         XY ...

  9. 解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER

    今天在用java与mysql数据库时发现Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COER ...

  10. Complete uninstall on Mac, HELP!

    Remove these directories: /Applications/Xamarin Studio.app /Developer/MonoTouch /Developer/MonoAndro ...