scala的多种集合的使用(2)之集合常用方法
一、常用的集合方法
1.可遍历集合的常用方法
下表列出了Traverable在所有集合常用的方法。接下来的符号:
c代表一个集合
f代表一个函数
p代表一个谓词
n代表一个数字
op代表一个简单的操作(通常是一个简单的函数)



2.可变的集合方法
下表里的是可变集合常用的操作符:

3.不可变的集合方法
注意不可变集合不可被修改,所以在第一行的每个表达式的结果必须赋给一个新变量。
| 操作符 | 描述 |
| c1 ++ c2 | 把c2集合的元素附加到c1里创造一个新的集合 |
scala> val c1 = Vector(1,2,3,4,5)
c1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> val c2 = Vector(6,7,8)
c2: scala.collection.immutable.Vector[Int] = Vector(6, 7, 8) scala> c1 ++ c2
res35: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8)
| 操作符 | 描述 |
| c :+ e | 返回把元素e附加到集合c的新集合 |
scala> val v1 = Vector(1,2,3,4,5)
c1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> val e = 10
e: Int = 10 scala> v1 :+ e
res38: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5, 10)
| 操作符 | 描述 |
| e +: c2 | 返回一个把元素e前插到集合c的新集合 |
scala> val v1 = Vector(1,2,3,4,5)
c1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> val e = 10
e: Int = 10 scala> e +: v1
res39: scala.collection.immutable.Vector[Int] = Vector(10, 1, 2, 3, 4, 5)
| 操作符 | 描述 |
| e :: list | 返回一个把e前插到名为list列表的集合(::只在List集合上用) |
scala> val list = List(7,8,9)
list: List[Int] = List(7, 8, 9) scala> val e = 10
e: Int = 10 scala> e :: list
res75: List[Int] = List(10, 7, 8, 9)
| 操作符 | 描述 |
| c drop n | 把c2集合的元素附加到c1里创造一个新的集合 |
scala> val v1 = Vector(1,2,3,4,5)
v1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> val n = 3
n: Int = 3 scala> v1 drop n
res1: scala.collection.immutable.Vector[Int] = Vector(4, 5)
| 操作符 | 描述 |
| c1 take n | 把集合的前两个元素列出来 |
scala> val c1 = Vector(1,2,3,4,5)
c1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> c1 take 2
res82: scala.collection.immutable.Vector[Int] = Vector(1, 2)
4.可变和不可变的map的常用方法
m代表一个不可变map
mm代表一个可变的map
k代表一个键
v代表一个值
p代表一个谓词
c代表一个集合
如果是var修饰,引用可变,支持读写。
如果是val修饰,引用不可变,支持读写。
| 操作符 | 描述 |
| m - k | 返回删除key(以及相应的value的值)后的map |
scala> val v1 = Vector(1,2,3,4,5)
v1: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5) scala> val map = Map(1 -> "a",2 -> "b",3 -> "c")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c) scala> map - 1
res5: scala.collection.immutable.Map[Int,String] = Map(2 -> b, 3 -> c)
| 操作符 | 描述 |
| m - (k1,k2,k3) | 返回删除k1,k2,k3后的map |
scala> val map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d",5 -> "e",6 -> "f")
map: scala.collection.immutable.Map[Int,String] = Map(5 -> e, 1 -> a, 6 -> f, 2-> b, 3 -> c, 4 -> d) scala> map - (1,3,5)
res6: scala.collection.immutable.Map[Int,String] = Map(6 -> f, 2 -> b, 4 -> d)
| 操作符 | 描述 |
| m -- c | 返回删除key后的map,c是指集合 |
scala> val map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d",5 -> "e",6 -> "f")
map: scala.collection.immutable.Map[Int,String] = Map(5 -> e, 1 -> a, 6 -> f, 2-> b, 3 -> c, 4 -> d) scala> val c = Vector(1,3,5)
c: scala.collection.immutable.Vector[Int] = Vector(1, 3, 5) scala> map -- c
res7: scala.collection.immutable.Map[Int,String] = Map(6 -> f, 2 -> b, 4 -> d)
| 操作符 | 描述 |
| m -- List(k1,k2) | 返回删除key后的map |
1
scala> val map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d",5 -> "e",6 -> "f")
map: scala.collection.immutable.Map[Int,String] = Map(5 -> e, 1 -> a, 6 -> f, 2-> b, 3 -> c, 4 -> d) scala> val list = List(1,3,5)
list: List[Int] = List(1, 3, 5) scala> map -- list
res8: scala.collection.immutable.Map[Int,String] = Map(6 -> f, 2 -> b, 4 -> d)
2
scala> val map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d",5 -> "e",6 -> "f")
map: scala.collection.immutable.Map[Int,String] = Map(5 -> e, 1 -> a, 6 -> f, 2
-> b, 3 -> c, 4 -> d) scala> map -- List(1,2,3)
res9: scala.collection.immutable.Map[Int,String] = Map(5 -> e, 6 -> f, 4 -> d)
| 操作符 | 描述 |
| m(k) | 返回k的value |
scala> var map = Map(1 -> 1,2 -> 2,3 -> 3,4 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 ->4) scala> map(2)
res34: Int = 2
| 操作符 | 描述 |
| m contains k | 如果map包含k则返回true |
scala> var map = Map(1 -> 1,2 -> 2,3 -> 3,4 -> 4)
map: scala.collection.immutable.Map[Int,Int] = Map(1 -> 1, 2 -> 2, 3 -> 3, 4 ->4) scala> map contains 3
res36: Boolean = true
| 操作符 | 描述 |
| m get k | 如果k存在返回Some[A]作为key的值,否则None |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map get 2
res44: Option[String] = Some(b) scala> map get 5
res45: Option[String] = None
| 操作符 | 描述 |
| m getOrElse(k,d) | 如果k找到的话,返回k的值,否则返回默认值d |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map getOrElse(2,"hello")
res46: String = b scala> map getOrElse(5,"hello")
res47: String = hello
| 操作符 | 描述 |
| m isDefinedAt k | 如果map包含k则返回true |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map isDefinedAt 2
res48: Boolean = true scala> map isDefinedAt 5
res49: Boolean = false
| 操作符 | 描述 |
| m keys | 把map中的keys作为Iterable返回 |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map keys
warning: there was one feature warning; re-run with -feature for details
res50: Iterable[Int] = Set(1, 2, 3, 4)
| 操作符 | 描述 |
| m keySet | 把map中的keys作为Set返回 |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map keySet
warning: there was one feature warning; re-run with -feature for details
res54: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
| 操作符 | 描述 |
| m values | 把map中的value作为Iterable返回 |
scala> var map = Map(1 -> "a",2 -> "b",3 -> "c",4 -> "d")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b, 3 -> c, 4-> d) scala> map values
warning: there was one feature warning; re-run with -feature for details
res56: Iterable[String] = MapLike(a, b, c, d)
二、在创建集合时声明一个类型
想要创建一个混合型的集合,scala不会自动分配想要的类型。
创建一个手动的集合如下:
scala> trait Animal
defined trait Animal scala> trait FurryAnimal extends Animal
defined trait FurryAnimal scala> case class Dog(name: String) extends Animal
defined class Dog scala> case class Cat(name: String) extends Animal
defined class Cat scala> val x = Array(Dog("Fido"),Cat("Felix"))
x: Array[Product with Serializable with Animal] = Array(Dog(Fido), Cat(Felix))
如上所示,scala给product指定了Serializable和Animal类型。如果想要一个Array[Animal],手动需要指定类型:
scala> val x = Array[Animal](Dog("Fido"),Cat("Felix"))
x: Array[Animal] = Array(Dog(Fido), Cat(Felix))
三、可变变量集合与不可变量集合
但把一个不可变的Vector赋给一个可变的var时,似乎可以给它添加元素。
scala> var sisters = Vector("Melinda")
sisters: scala.collection.immutable.Vector[String] = Vector(Melinda)
scala> sisters = sisters :+ "Melissa"
sisters: scala.collection.immutable.Vector[String] = Vector(Melinda, Melissa)
scala> sisters = sisters :+ "Marisa"
sisters: scala.collection.immutable.Vector[String] = Vector(Melinda, Melissa, Ma
risa)
scala> sisters.foreach(println)
Melinda
Melissa
Marisa
尽管你看起来改变了一个不可改变的集合,但实际上是每次用:+方法时sisters变量会指向一个新的集合。sisters变量是可变的,所以每次执行时相当于重新赋值一个新的集合。
总结:
- 一个可变的变量var可以被赋予一个新的数据。
- 一个不可变的变量val就如java中的final变量,不可能被重新赋值。
- 在可变集合的元素中可以被改变(ArrayBuffer)。
- 在不可被改变的集合元素中不可被改变(Vector)。
scala的多种集合的使用(2)之集合常用方法的更多相关文章
- scala的多种集合的使用(1)之集合层级结构与分类
一.在使用scala集合时有几个概念必须知道: 1.谓词是什么? 谓词就是一个方法,一个函数或者一个匿名函数,接受一个或多个函数,返回一个Boolean值. 例如:下面方法返回true或者false, ...
- Scala学习之路 (四)Scala的数组、映射、元组、集合
一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
[源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...
- 【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合
[ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整 ...
- 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
背水一战 Windows 10 之 绑定 通过 Binding 绑定对象 通过 x:Bind 绑定对象 通过 Binding 绑定集合 通过 x:Bind 绑定集合 示例1.演示如何通过 Bindin ...
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较
1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...
- [黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)
---------------------- ASP.Net+Android+IO开发..Net培训.期待与您交流! ---------------------- 0. 集合框架按其所实现的接口, 大 ...
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
随机推荐
- mysql数据库打开连接时报错:1251
考试之前由于一直在做团队项目导致疏忽了数据库 等到今天来连接做考试的时候发现报错:1251 网上的解释以及解决方法: 今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因 ...
- PHP内核之旅-6.垃圾回收机制
回收PHP 内核之旅系列 PHP内核之旅-1.生命周期 PHP内核之旅-2.SAPI中的Cli PHP内核之旅-3.变量 PHP内核之旅-4.字符串 PHP内核之旅-5.强大的数组 PHP内核之旅-6 ...
- Harbor配置https认证
Harbor配置https认证由于Harbor不附带任何证书,它默认使用HTTP来提供注册表请求.但是,强烈建议为任何生产环境启用安全性.因为测试使用,使用自签名证书: 1.创建CA证书 首先创建个目 ...
- 《前端之路》之二:数据类型转换 && 隐式转换 || 显式转换
目录 02:数据类型转换 && 隐式转换 || 显式转换 02:数据类型转换 && 隐式转换 || 显式转换 在上一个章节中,我们介绍了 JavaScript 的基本的 ...
- DotNetCore跨平台~EFCore2.0连接Mysql的烦恼-已解决
回到目录 对于传统的nuget包,我们习惯上用官方或者大型组织的,因为它们比较考靠谱,但就在前两天.net core2.0发布后,我把efcore也升级到2.0了,mysql.EfCore也升级到支持 ...
- Abp中使用可视化的日志面板
Abp中使用可视化的日志面板 如果你还不了解LogDashboard请看这里. ABP的相关知识不做介绍如果有需要请阅读ABP官方文档 ABP是Net下非常优秀的开发框架,在中国很多的项目都正在使用它 ...
- seg:NLP之正向最大匹配分词
已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于词典与规则的汉语自动分词系统. 二.技术路线 采用正向最 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——4.如何编写ROS的第一个程序hello_world
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- Memcache的 简介
MemCache memcache是一套分布式的高速缓存系统.目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著,是一套开放源代码软件. 工作 ...
- Django学习之九: auth 认证组件
目录 Django auth 认证组件 配置使用auth组件及其中间件 request.user 可以直接在template模版中使用 auth组件常用api 获取认证model类 认证检测装饰器@l ...
