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

时间:2023-01-23 20:08:40

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. ios小数向上、下取整,计算结果向上、下取整

    [摘要:小数背上与整,指小数局部间接进1 x=3.14, ceilf (x)=4 小数背下与整,指间接往失落小数局部 x=3.14,floor(x)=3 盘算效果背上与整 A被除数,B除数 ,(AB- ...

  2. Linux内核【链表】整理笔记(2)

    关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型.至于链表的遍历,内核也有一 ...

  3. hdu 2053

    Ps:找规律题....凡是平方数都是开...WA了一次..数组给的太小?...后来给到3000..就AC了 代码: #include "stdio.h"long long dp[3 ...

  4. 关于解决pyinstaller2.1将.py打包成exe文件在中文目录下不能执行的问题

    关于解决pyinstaller2.1将.py打包成exe文件在中文目录下不能执行的问题 这个问题困扰我好久了,今天终于非常偶然的在http://www.v2ex.com/t/113856#reply1 ...

  5. Hat's Fibonacci(大数问题)

    #include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[ ...

  6. SAP CRM 集类型(Set Type)与产品层次(Product Hierarchy)

    本文是产品与对象相关的部分SAP文档的翻译,不包含配置部分. 本文链接:https://www.cnblogs.com/hhelibeb/p/10112723.html 1,对象(Objects) 对 ...

  7. 使用fpm 软件包打包

    安装 sudo gem install --no-ri --no-rdoc fpm 简单使用 一个 redis的简单demo % ls src/redis-server redis.conf src/ ...

  8. 2018-2019 ACM-ICPC 焦作赛区 部分题解

    题目链接:https://codeforces.com/gym/102028 B. Ultraman vs. Aodzilla and Bodzilla 题意: 两只怪兽,它们的生命和攻击分别为hpA ...

  9. 项目搭建系列之四:SpringMVC框架下使用UrlRewrite实现地址重写

    简单记录一下UrlRewrite实现地址重写功能. 1.pom.xml 在pom.xml增加配置UrlRewrite jar <!-- URL Rewrite --> <depend ...

  10. JavaWeb项目中使用ajax上传文件

    1.jsp $("#cxsc").click(function(){ var bankId = $("#bankId").val(); var formdata ...