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版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
随机推荐
- scws中文分词安装和使用
一.下载源码 wget http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 tar xvjf scws-1.2.3.tar.bz2 二.执行配置 ...
- call,apply,bind的理解
2020-03-19 call,apply,bind的理解 先说区别call, apply基本上没什么不一样,唯一不一样的地方是传参方式不同 但是bind和call,apply有区别.bind是重新绑 ...
- 分享一个springboot脚手架
项目介绍 在我们开发项目的时候各个项目之间总有一些可共用的代码或者配置,如果我们每新建一个项目就把代码复制粘贴再修改就显得很没有必要.于是我就做了一个 poseidon-boot-starter 该项 ...
- Python正则式 - re
目录 1. 相关概念 1.1. rstring 1.2. 元字符 2. 模式Pattern 2.1. re.flag 3. API 4. 其他 4.1. 单词边界 '\b' 4.2. 贪婪和非贪婪 4 ...
- Python:列表和列表的增删改查
目录 列表 列表的取值 通过下标 切片 用len()取得列表的长度 用下标改变列表中的值 列表连接和列表复制 用 del 语句从列表中删除值 in和not in操作符 多重赋值 列表的方法 查找 增加 ...
- jmeter对数据库进行简单的压测
1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于: \java\jre\lib\ext 文件为:mysql-connect ...
- python基础整理(2)
布尔表达式与其余值的替换 值的测试 Python不仅仅可以使用布尔型变量作为条件,它可以直接在if中使用任何表达式作为条件: 大部分表达式的值都会被当作True,但以下表达式值会被当作False: F ...
- JPS/JPS+ 寻路算法
目录 概念 强迫邻居(Forced Neighbour) 跳点(Jump Point) JPS 寻路算法(Jump Point Search) 实现原理 示例过程 JPS+(Jump Point Se ...
- rest_framework django 简单使用(数据库创建数据, 覆盖数据, 其他的大同小异)
事先说几个坑:数据库定义字段时候,不要定义name 要定义 username 首先, 定义model(简单定义) from django.db import models from django.co ...
- JDBC——什么是JDBC?
JDBC:Java数据库连接(Java DataBase Connectivity),是Java语言中用来规范客户端如何程序如何来访问数据库的应用程序接口(API),提供了诸如查询和更新数据库中数据的 ...