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版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
随机推荐
- java实现放麦子问题
/* 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第 1 个棋盘格放 1 粒麦子, 在第 2 个棋盘格放 2 粒麦子,在第 3 个棋盘格放 4 粒麦子, 在第 ...
- Java实现第八届蓝桥杯正则问题
正则问题 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式. 小明想求出这个正则表达式能接受的最长字符串的长度. 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是 ...
- java实现第四届蓝桥杯颠倒的价牌
颠倒的价牌 题目描述 小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店. 其标价都是4位数字(即千元不等). 小李为了标价清晰.方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就 ...
- Java学习之斐波那契数列实现
描述 一个斐波那契序列,F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n>=2),根据n的值,计算斐波那契数F(n),其中0≤n≤1000. 输入 输入 ...
- CentOS7.6操作系统安装实例以及Linux版本、哲学思想介绍
Linux起源1991年的10月5日,Torvalds在comp.os.minix新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sour ...
- 00-03.kaliLinux-vi粘贴复制功能配置
KaliLinux在xShell的vim中默认是无法复制和粘贴的,需要做如下配置后才能使用: 方法一 进入vim命令行模式,输入: :set mouse=c #进入Command-line 模式 然后 ...
- Linux系统如何设置开机自动运行脚本?
大家好,我是良许. 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务.在 Windows 下,我们有很多方法可以设置开机启动,但在 Linux 系统下我们需要如何操作呢? Li ...
- 动手造轮子:实现一个简单的 AOP 框架
动手造轮子:实现一个简单的 AOP 框架 Intro 最近实现了一个 AOP 框架 -- FluentAspects,API 基本稳定了,写篇文章分享一下这个 AOP 框架的设计. 整体设计 概览 I ...
- ZWave 中的消息队列机制
文章主题 在我们的日常编程中,对消息队列的需求非常常见,使用一个简洁.高效的消息队列编程模型,对于代码逻辑的清晰性,对于事件处理的高效率来说,是非常重要的.这篇文章就来看看 ZWave 中是通过什 ...
- navicat 出现 mysql远程连接问题 Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
今天做服务器上的东西需要看数据库时,突然发现有这个报错,然后自己也查了很多资料 我最后找到一个在my,cnf配置文件中mysqld下加入一条 max_allowed_packet = 500M 也就是 ...