Scala数据结构(二)
一、集合的基础操作
1,head头信息
//获取集合的第一个元素
val list = List(,,)
list.head //
2,tail尾信息
//获取集合除去头元素之外的所有元素
val list = List(,,)
list.tail //List(3,5)
3,last最后元素
//获取集合的最后一个元素
val list = List(,,)
list.last //
4,init初始化
//获取集合除去最后一个元素的前面所有元素
val list = List(,,)
println(list.init) //List(1,3)
5,reverse反转
//集合反转
val list = List(,,)
val resList: List[Int] = list.reverse //List(5, 3, 1)
6,sum、max、min
val list = List(,,)
println(list.sum) //9 求和
println(list.max) //5 最大值
println(list.min) //1 最小值
7,take(n)获取前n个元素
val list = List(,,)
val takeList = list.take() //List(1)
二、集合的高级操作
1,sortBy和sortWith
//sortBy只能按照升序排列,sortWith可自定义升降序
val list = List(,,,,,)
val sortByList: List[Int] = list.sortBy(x=>x) //List(1, 3, 4, 7, 9, 10)
val sortWithList: List[Int] = list.sortWith((left,right)=>left>right) //List(10, 9, 7, 4, 3, 1),如果要升序可以left<right
2,groupBy分组
//定义按照元素分组会生成对应的map
val list = List(,,,,,)
val groupByMap: Map[Int, List[Int]] = list.groupBy(x=>x) //Map(4 -> List(4), 1 -> List(1, 1), 9 -> List(9), 3 -> List(3, 3))
3,map映射
在Scala中可以通过map映射操作来解决:将集合中的每一个元素通过指定功能(函数)映射(转换)成新的结果集合。这里其实就是所谓的将函数作为参数传递给另外一个函数,这是函数式编程的特点
//将list集合中的每个元素*2
val list = List(,,)
val newList: List[Int] = list.map(_*) //List(2,6,10)
4,flatMap扁平化
将集合中的每个元素的子元素映射到某个函数并返回新的集合。
val list = List(List(,,),,List(,))
val newList = list.flatMap {
case item =>
//判断类型如果是List[Any]类型就转换
if (item.isInstanceOf[List[Any]]) {
item.asInstanceOf[List[Any]]
} else {
//如果是普通类型就直接List(item)包装
List(item)
}
}
println(newList) //List(1, 2, 3, 1, 4, 98)
5,filter过滤
//filter过滤获取为true的元素组成集合
val list = List(, , , , , )
val filterList: List[Int] = list.filter(_ > ) //List(25, 98)
6,reduce化简

val list = List(, , , )
//1+2+3+4 10
val reduceLeft: Int = list.reduce(_ + _)
//1-(2-(3-4)) -2
val reduceRight: Int = list.reduceRight(_ - _)
7,folder折叠

val list = List(, , , ) //集合List
//(100,1, 2, 3, 4) =>化简 (((100-1)-2) -3)) – 4 = 90
println(list.foldLeft()(_-_)) // [函数柯里化(将多个参数,分别传递)]
//(1,2,3,4,100) => 化简 1-(2-(3-(4-100))) = 98
println(list.foldRight()(_-_))
8,match匹配
模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。如果所有case都不匹配,那么会执行case _ 分支,类似于Java中default语句
val oper = '-'
val n1 =
val n2 =
var res =
oper match {
case '+' => res = n1 + n2
case '-' => res = n1 - n2
case '*' => res = n1 * n2
case => println("")
case '/' => res = n1 / n2
case _ => println("oper error")
}
println("res=" + res) //
Scala数据结构(二)的更多相关文章
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- Scala数据结构
Scala数据结构 主要的集合特质 Scala同时支持可变集合和不可变集合,优先采用不可变集合.集合主要分为三大类:序列(List),集(set),映射(map).所有的集合都扩展自Iterable特 ...
- scala 数据结构(二):数组
1 数组-定长数组(声明泛型) 第一种方式定义数组 这里的数组等同于Java中的数组,中括号的类型就是数组的类型 val arr1 = new Array[Int](10) //赋值,集合元素采用小括 ...
- Java 8 vs. Scala(二):Stream vs. Collection
[编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要 ...
- Scala学习(二)--- 控制结构和函数
控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句 ...
- 10. Scala数据结构(上)-集合操作
10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...
- Scala学习二十——Actor
一.本章要点 每个actor都要扩展Actor类并提供act方法 要往actor发送消息,可以用actor!message 消息发送是异步的:”发完就忘“ 要接受消息,actor可以调用receive ...
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
- 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
随机推荐
- 全网最全postman接口测试教程和接口项目实战~从入门到精通!!!
Postman实现接口测试内容大纲一览: 一.什么是接口?为什么需要接口? 接口指的是实体或者软件提供给外界的一种服务. 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改.从而使得内 ...
- windows server2012在已有.net4.5框架的基础上安装.net3.5的方法
我们在一台服务器运行各种程序的时候难免会用到一些好用的但是很老的软件.老软件也就难免需要以前的那种环境来运行,但是老的环境与新的环境往往不兼容.下面我就来讲一讲系统在已有.net4.5的情况下怎么安装 ...
- 第二个hibernate Annotation版本的helloworld
经过第一次的 hibernate 我发现每一个数据库表都对应了一个类,并且每一个类都要新建一个文件进行配置 很麻烦! 于是便出现了Annotation版本的hibernate. 具体如下: 1.同 ...
- 20184302 2019-2020-2 《Python程序设计》实验四报告
20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...
- JS input输入框字数超出长度显示省略号.....
样式添加: overflow:hidden; white-space:nowrap; text-overflow:ellipsis;
- 学习nginx从入门到实践(五) 场景实践之静态资源web服务
一.静态资源web服务 1.1 静态资源 静态资源定义:非服务器动态生成的文件. 1.2 静态资源服务场景-CDN 1.3 文件读取配置 1.3.1 sendfile 配置语法: syntax: se ...
- tp5的 LayUI分页样式实现
1.先配置你的分页参数: //分页配置 'paginate' => [ 'type' => 'Layui', 'var_page' => 'page', 'li ...
- 「雅礼集训 2017 Day4」洗衣服
题目 点这里看题目. 分析 首先考虑只有洗衣机的情况.我们可以想到,当前洗衣任务结束越早的洗衣机应该被先用,因此可以用堆来动态维护. 再考虑有烘干机的情况.很显然,越晚洗完的衣服应该越早烘 ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- JavaSE基础之数组
数组 一.静态初始化 格式一 数据类型[] 变量名 = {元素1,元素2,元素3...}; 格式二 数据类型[] 变量名 = new 数据类型{元素1,元素2,元素3...}; 或者: 数据类型[] ...