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") ...
随机推荐
- jQuery-Selectors(选择器)的使用(二、层次篇)(转载)
原文:http://www.cnblogs.com/bynet/archive/2009/12/01/1614405.html 本系列文章导航 jQuery-Selectors(选择器)的使用(一.基 ...
- 利用 ImageAI 在 COCO 上学习目标检测
ImageAI是一个python库,旨在使开发人员能够使用简单的几行代码构建具有包含深度学习和计算机视觉功能的应用程序和系统. 这个 AI Commons 项目https://commons.spec ...
- linux学习笔记-12.输入输出重定向及管道
1.新建一个文件 touch a.txt> b.txt 2.错误重定向:2> find /etc -name zhaoxing.txt 2> error.txt 3.将正确或错误的信 ...
- poj-2421-最小生成树刷题
title: poj-2421-最小生成树刷题 date: 2018-11-20 20:30:29 tags: acm 刷题 categories: ACM-最小生成树 概述 做了几道最小生成树的题, ...
- MySQL Binlog 介绍
Binlog 简介 MySQL中一般有以下几种日志: 日志类型 写入日志的信息 错误日志 记录在启动,运行或停止mysqld时遇到的问题 通用查询日志 记录建立的客户端连接和执行的语句 二进制日志 记 ...
- zookeeper 节点启动时的更新机制
使用zk的应用节点和zk数据本身的同步,当系统启动时使用zk配置的信息和zk本身存储不一致, 此时应存在一个更新机制将应用配置数据和zk数据更新一致. 启动时更新拉取zk配置中心的更新本地数据,以zk ...
- Ubuntu 安装Chrome
apt方式安装Chrome 1.添加密匙 wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key a ...
- BZOJ4045 : [Cerc2014] bricks
首先求出B和W的个数,如果只出现了一种那么直接输出sum(k). 否则依次扫描,能割就割,时间复杂度$O(n)$. #include<cstdio> #define N 100010 ty ...
- [Java]JavaScript在这里学习
在这里学习JavaScript >> JS 教程 >> JavaScript 高级教程
- Xtreme8.0 - Play with GCD dp
Play with GCD 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/play-with-g ...