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 = cscala> 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 = abcdescala> abcde.mkString res19: String = abcdescala> 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编程第18章学习笔记——有状态的对象
银行账号的简化实现: scala> class BankAccount{| private var bal: Int = 0| def balance: Int = bal| def depos ...
- scala编程第17章学习笔记(2)——集和映射
默认情况下在使用"Set"或"Map"的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版 ...
- 《小马哥讲Spring核心编程思想》-第一章学习笔记(1)
<小马哥讲Spring核心编程思想>-第一章学习笔记(1) 一.课程介绍 1.为什么要学习spring? 2.深入学习spring的难点有哪些? 3.课程的设计思路是怎样的? 二.内容综述 ...
- C++程序设计教程(钱能)第四章 学习笔记
C++程序设计教程(钱能)第四章 学习笔记 4.1 名词解释与操作符 4.1.1 名词解释 4.1.2 操作符汇总 4.1.3 操作符的说明 4.2 算数运算问题 4.2.1 周而复始的整数 4.2. ...
- NVIDIA可编程推理加速器TensorRT学习笔记(二)——实操
NVIDIA可编程推理加速器TensorRT学习笔记(二)--实操 TensorRT 是 NVIDIA 自家的高性能推理库,其 Getting Started 列出了各资料入口,如下: 本文基于博 ...
- 知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别
知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别 知识图谱的概念,与传统语义网络的区别 狭义概念 作为语义网络的内涵 与传统语义网络的区别 优点 缺点 与 ...
- 工程伦理第三章学习笔记2020最新
工程伦理第三章学习笔记2020最新 因为之前自己在网上找答案总是觉得费劲,一道一道的找,很慢,突然找到了前两章的答案,感觉有一种前人种树后人乘凉的感觉,于是自己在艰难找完第三章习题并全对的情况下,将题 ...
- 多维随机变量及其分布——《概率论及其数理统计》第三章学习笔记
多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 文章目录 多维随机变量及其分布--<概率论及其数理统计>第三章学习笔记 前言 MindMap 二维随机变量 定义与 ...
最新文章
- Golang TDD实践报告:快速排序Quick Sort
- 普通人也能用AI拍出3D大片?这位清华博士后这么做
- 几张图看懂列式存储(转)
- cs6 数据库mysql_能mysql内容
- 攻破MySQL性能瓶颈必知的调优技巧
- 【数据竞赛】从0梳理1场时间序列赛事!
- 2021暑假实习-SSM超市积分管理系统-day10笔记
- Nacos源码NacosServiceRegistryAutoConfiguration
- WZ132发现打CXY要么是程序员,要么是丑小鸭
- android 画中画模式自定义,Android 8.0 Oreo 画中画模式
- 线性回归(五)---弹性网络回归
- Percona 成为 MariaDB 基金会铜牌赞助商
- JavaScript中的流程控制语句
- Atitit 知识结构化的艺术 目录 1. 知识信息结构化脑图	2 1.1. 散乱化模式	2 2. 直线排列	2 2.1.1. 直排	2 2.1.2. 链表模式	2 3. 树形排列	2 3.1.
- xui和嘟嘟桌面哪个好_最全的纸尿裤测评,新手妈妈必看,嘟嘟妈教你少踩雷
- 【Django】admin.ModelAdmin的源码-20220105
- pip uninstall
- 如何跳出令人窒息的职场死循环
- js实现图片上传预览功能
- 重拾数据库,常用的数据库语句