一、集合的基础操作

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数据结构(二)的更多相关文章

  1. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  2. Scala数据结构

    Scala数据结构 主要的集合特质 Scala同时支持可变集合和不可变集合,优先采用不可变集合.集合主要分为三大类:序列(List),集(set),映射(map).所有的集合都扩展自Iterable特 ...

  3. scala 数据结构(二):数组

    1 数组-定长数组(声明泛型) 第一种方式定义数组 这里的数组等同于Java中的数组,中括号的类型就是数组的类型 val arr1 = new Array[Int](10) //赋值,集合元素采用小括 ...

  4. Java 8 vs. Scala(二):Stream vs. Collection

    [编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要 ...

  5. Scala学习(二)--- 控制结构和函数

    控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句 ...

  6. 10. Scala数据结构(上)-集合操作

    10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...

  7. Scala学习二十——Actor

    一.本章要点 每个actor都要扩展Actor类并提供act方法 要往actor发送消息,可以用actor!message 消息发送是异步的:”发完就忘“ 要接受消息,actor可以调用receive ...

  8. POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆

    考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...

  9. 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)

    数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...

随机推荐

  1. 优雅的敲JS代码的几个原则

    一.条件语句        1,使用 Array.includes 来处理多重 || 条件          // ----- 一般 ------ if (fruit == 'apple' || fr ...

  2. tensorflow2.0学习笔记第二章第三节

    2.3激活函数sigmoid函数 f(x)= 1/(1 + e^-x)tf.nn.sigmoid(x)特点:(1)求导后的数值在0-0.25之间,链式相乘之后容易使得值趋近于0,形成梯度消失 (2)输 ...

  3. api请求允许跨域的问题

    让api请求允许跨域 header("Access-Control-Allow-Origin:*");header('Access-Control-Allow-Credential ...

  4. git clone 时注意点

    环境: 在公司访问外网需要设置代理,另外,在公司局域网内架设了一台 GIT 服务器. 在使用 git clone 时,不能设置成 git 使用代理: git config --global http. ...

  5. [每日一题2020.06.15]P1226 【模板】快速幂取余运算

    我是题目 快速幂就是快速求 \(a^b\)的一种算法 快速幂 思想 : 比如我要求 \(6^9\) 首先将幂转化为二进制形式 : \[6^9 = 6^{1001} \tag{1} \] 可以得到 : ...

  6. TensorFlow从0到1之TensorFlow csv文件读取数据(14)

    大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 TensorFlow 中读取文件,本节将重点介绍如何从 CSV ...

  7. iostst

    原文链接:https://blog.csdn.net/qq_20332637/article/details/82146753 iostat用于输出CPU和磁盘I/O相关的统计信息,iostat 也有 ...

  8. Jmeter基础001----jmeter的安装与配置

    一.Java环境安装 1.下载jdk----oracal官网   2.JDK版本要求:                     JMeter2.x- jdk1.6                   ...

  9. 如何用 Python 和 API 收集与分析网络数据?

    摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...

  10. jenkins构建报错 Error fetching remote repo 'origin'

    ERROR: Error fetching remote repo 'origin' Finished: FAILURE // 原因如下 原因一:可能是配置的git分支的权限问题,检查一下配置里面的源 ...