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,因此他们可以应用到各种可枚举的集合类上。
scala编程第16章学习笔记(1)的更多相关文章
- scala编程第16章学习笔记(3)——List类的高阶方法
列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...
- scala编程第16章学习笔记(2)
转换列表:toIterator, toArray,copyToArray List类的toArray方法将递归存放的列表转换为连续存放的数组 Array类的toList方法将连续存放的数组转换为递归存 ...
- scala编程第16章学习笔记(4)——List对象的方法
通过元素创建列表:List.apply List(1, 2, 3) 等价于List.apply(1, 2, 3): scala> List.apply(1, 2, 3) res0: List[I ...
- scala编程第19章学习笔记(1)——类型参数化
一.queues函数式队列 函数式队列是一种具有以下三种操作方式的数据结构: head 返回队列的第一个元素. tail 返回除第一个元素之外的队列. scala> import scala.c ...
- scala编程第18章学习笔记——有状态的对象
银行账号的简化实现: scala> class BankAccount{ | private var bal: Int = 0 | def balance: Int = bal | def de ...
- scala编程第17章学习笔记(4)——元组
元组可以把固定数量的条目组合在一起以便于作为整体传送.不像数组或列表,元组可以保存不同类型的对象. 元组常用来返回方法的多个值.例如,下面的方法找到集合中的最长单词并返回它的索引: scala> ...
- scala编程第17章学习笔记(3)
可变(mutable)集合与不可变(immutable)集合 为了更易于完成不可变集合到可变集合的转换,或者反向转换,Scala提供了一些语法糖.纵使不可变集和映射并不支持真正的+=方法,Scala还 ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...
- scala编程第17章学习笔记(1)——集合类型
列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...
随机推荐
- java实现最小堆
1.堆:通常通过二叉堆,实为二叉树的一种,分为最小堆和最大堆,具有以下性质: 任意节点小于它的所有后裔,最小元在堆的根上. 堆总是一棵完全树 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小 ...
- Java 多线程 - synchronize 关键字
目录 Java 多线程 - synchronize 关键字 Java 多线程 - synchronize 关键字 学习自 http://cmsblogs.com/?p=2071 https://www ...
- BeagleBone Black教程之BeagleBone Black使用到的Linux基础
BeagleBone Black教程之BeagleBone Black使用到的Linux基础 BeagleBone Black涉及到的Linux基础 在许多没有Linux相关经验的人看来,Linux看 ...
- Tecnomatix Process Designer & Process Simulate用法
1. 删除项目 在AdminConsole->Project Action中,点击Delete project即可.
- seq2seq模型以及其tensorflow的简化代码实现
本文内容: 什么是seq2seq模型 Encoder-Decoder结构 常用的四种结构 带attention的seq2seq 模型的输出 seq2seq简单序列生成实现代码 一.什么是seq2seq ...
- CF 494 F. Abbreviation(动态规划)
题目链接:[http://codeforces.com/contest/1003/problem/F] 题意:给出一个n字符串,这些字符串按顺序组成一个文本,字符串之间用空格隔开,文本的大小是字母+空 ...
- Codeforces Round #368 (Div. 2) B. Bakery 水题
B. Bakery 题目连接: http://www.codeforces.com/contest/707/problem/B Description Masha wants to open her ...
- 本地hosts文件IP地址解析
localhost是一个域名,127.0.0.1为IP地址.Windows系统中,约定127.0.0.1为本地IP地址.localhost是其对应的域名.配置是在hosts文件中设置的,Windows ...
- 用docker搭建ss访问火星
最近弄了个vultr的VPS,便想用它搭个梯子访问火星.由于vultr是支持docker的,便找了个ss的docker镜像: https://hub.docker.com/r/mritd/shadow ...
- 使用CefSharp在.Net程序中嵌入Chrome浏览器(六)——调试
chrome强大的调试功能令许多开发者爱不释手,在使用cef的时候,我们也可以继承这强大的开发者工具. 集成调试: 我们可以使用如下函数直接使用集成在chrome里的开发者工具 _chrome.Sho ...