Scala - 快速学习05 - 数据结构
1- 数组(Array)
val myIntArr = new Array[Int](3) //> myIntArr : Array[Int] = Array(0, 0, 0)
myIntArr(0) = 111
myIntArr(1) = 222
myIntArr(2) = 333
for (i <- 0 to 2) println(myIntArr(i)) //> 111
//| 222
//| 333 val myStrArr = new Array[String](3) //> myStrArr : Array[String] = Array(null, null, null)
myStrArr(0) = "AAA"
myStrArr(1) = "BBB"
myStrArr(2) = "CCC"
for (i <- 0 to 2) println(myStrArr(i)) //> AAA
//| BBB
//| CCC val myIntArr2 = Array(123, 456, 789) //> myIntArr2 : Array[Int] = Array(123, 456, 789)
val myStrArr2 = Array("aaa", "bbb", "ccc") //> myStrArr2 : Array[String] = Array(aaa, bbb, ccc)
- 整型数组,每个数组元素初始化为0
- 字符串数组,每个数组元素初始化为null
2- 列表(List)
- 可以使用intList.head来获取列表的头部
- 可以使用intList.tail来获取列表的尾部
- 可以使用“::”操作符,可以在列表的头部增加新的元素,也可以构建列表
- 可以使用:::操作符对不同的列表进行连接得到新的列表
val intList = List(1, 2, 3) //> intList : List[Int] = List(1, 2, 3)
val intList2 = 4 :: 5 :: 6 :: Nil //> intList2 : List[Int] = List(4, 5, 6)
val initList3 = 0 :: intList //> initList3 : List[Int] = List(0, 1, 2, 3)
val initList4 = intList ::: intList2 //> initList4 : List[Int] = List(1, 2, 3, 4, 5, 6)
initList4.sum //> res0: Int = 21
3- 元组(Tuple)
val myTuple = ("AAA", 111, 'v') //> myTuple : (String, Int, Char) = (AAA,111,v)
println(myTuple._1) //> AAA
println(myTuple._2) //> 111
println(myTuple._3) //> v
4- 集(Set)
- 对不可变集进行操作,会产生一个新的集,原来的集并不会发生变化。
- 对可变集进行操作,改变的是该集本身。
var mySet = Set("AAA", "BBB") //> mySet : scala.collection.immutable.Set[String] = Set(AAA, BBB)
mySet += "CCC"
println(mySet.contains("CCC")) //> true
package testscala
import scala.collection.mutable.Set object TestScala {
def main(args: Array[String]) {
val myMutableSet = Set("AAA", "BBB")
myMutableSet += "ccc"
println(myMutableSet)
}
}
注意:虽然声明myMutableSet为val变量,但由于其是可变集,所以能够可以正确执行myMutableSet += "ccc",不会报错。
5- 映射(Map)
- 不可变映射,是无法更新映射中的元素的,也无法增加新的元素。
- 可变映射,可以更新和添加映射的元素,但在创建时需要引入scala.collection.mutable.Map包。
val test = Map("111" -> "AAA", 222 -> "BBB", "333" -> "CCC")
//> test : scala.collection.immutable.Map[Any,String] = Map(111 -> AAA, 222 -> B
//| BB, 333 -> CCC)
println(test("111")) //> AAA
println(test(222)) //> BBB
if (test.contains("333")) test("333") else 0 //> res0: Any = CCC
示例:可变映射
import scala.collection.mutable.Map
val test2 = Map(1 -> "a", 2 -> "b") //> test2 : scala.collection.mutable.Map[Int,String] = Map(2 -> b, 1 -> a)
test2(1) = "A"
test2(3) = "d"
test2 += (4 -> "d", 5 -> "e") //> res0: testrepl.test2.type = Map(2 -> b, 5 -> e, 4 -> d, 1 -> A, 3 -> d)
- 循环遍历映射的基本格式:for ((k,v) <- 映射) 语句块
- 可以同时遍历k和v,也可以只遍历映射中的k或者v
val test3 = Map("1" -> "AAA", "2" -> "BBB", "3" -> "CCC")
//> test3 : scala.collection.immutable.Map[String,String] = Map(1 -> AAA, 2 -> B
//| BB, 3 -> CCC)
for ((k, v) <- test3) printf("Key is : %s and Value is: %s\n", k, v)
//> Key is : 1 and Value is: AAA
//| Key is : 2 and Value is: BBB
//| Key is : 3 and Value is: CCC
for (k <- test3.keys) println(k) //> 1
//| 2
//| 3
for (v <- test3.values) println(v) //> AAA
//| BBB
//| CCC
for (x <- test3) println(x) //> (1,AAA)
//| (2,BBB)
//| (3,CCC)
6- 迭代器(Iterator)
- next可以返回迭代器的下一个元素
- hasNext用于检测是否还有下一个元素
val iter = Iterator("AAA", "BBB", "CCC") //> iter : Iterator[String] = non-empty iterator
while (iter.hasNext) {
println(iter.next())
} //> AAA
//| BBB
//| CCC
val iter2 = Iterator("111", "222", "333") //> iter2 : Iterator[String] = non-empty iterator
for (elem <- iter2) {
println(elem) //> 111
//| 222
//| 333
7 - 示例
def qSort(x: List[Int]): List[Int] = {
if (x.length <= 2) x
else qSort(x.filter(x.head > _)) ++
x.filter(x.head == _) ++
qSort(x.filter(x.head < _))
} //> qSort: (x: List[Int])List[Int]
qSort(List(6, 4, 5, 3, 1, 2, 9, 8, 0, 7)) //> res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 8, 7, 9)
排序示例-2:
def qSort(y: List[Int]): List[Int] =
if (y.length < 2) y
else qSort(y.filter(_ < y.head)) ++
y.filter(_ == y.head) ++
qSort(y.filter(_ > y.head)) //> qSort: (y: List[Int])List[Int] qSort(List(6, 4, 5, 3, 1, 2, 9, 8, 0, 7)) //> res0: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Scala - 快速学习05 - 数据结构的更多相关文章
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...
- Scala - 快速学习02 - 搭建开发环境
1- 下载与安装 下载链接:http://www.scala-lang.org/download/ CMD To run Scala from the command-line, simply dow ...
- scala快速学习笔记(三):Collections,包
VI.Collections 1.Array 一些常用方法:println, map( _ * 2), filter(_ % 2 == 0), sum, reserve Array是不可变的, ...
- Scala - 快速学习09 - 函数式编程:一些操作
1- 集合类(collection) 系统地区分了可变的和不可变的集合. scala.collection包中所有的集合类 可变集合(Mutable) 顾名思义,意味着可以修改,移除或者添加一个元素. ...
- Scala - 快速学习07 - 模式匹配
Scala中的模式匹配的功能可以应用到switch语句.类型检查.“解构”等多种场合. 简单匹配 Scala的模式匹配最常用于match语句中.Scala的match语句类似Java里的switch. ...
- Scala - 快速学习06 - 面向对象
1- 类 1.1- 简介:类.方法及对象 类是用来创建对象的蓝图. Scala文件中包含的多个类之间,都是彼此可见的,不需要声明为public. 创建对象 定义好类以后,就可以使用new关键字来创建对 ...
- Scala - 快速学习04 - 求值策略
表达式求值策略(Evaluation Strategy) Scala中所有的运算都是基于表达式的. Call By Value - 对函数实参求值,且仅求值一次:函数调用之前对所有表达式进行求值 Ca ...
- Scala - 快速学习03 - 基础语法
1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...
- Scala - 快速学习01 - Scala简介
Scala简介 Scala(Scalable Language)是一门多范式(multi-paradigm)编程语言,Scala的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...
随机推荐
- 进程&线程(转)
(摘自:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html) 在传统的操作系统中,进程拥有独立的内存地址空 ...
- 大面积project.pbxproj冲突问题解决
在团队开发中,经常会有project.pbxproj的冲突出现. 所以我们添加过新的文件后,要及时的提交,养成好习惯.以免出问题. 但是总有一些时候忘记提交出现大面积的冲突,然后把==== <& ...
- 7.地图随机装饰,与转化过程补充,与ai的设计思路
这两天本来只想实现地图的随机装饰,然后发现以前的bin格式设计存在不足,所以最后不得不去改地图,并去重制整个地图的阶段,此篇总结这个过程 先描述下bin结构 首先地图由无数六边形组合,一个六边形由两层 ...
- dremio jdbc使用
驱动包地址 链接:https://pan.baidu.com/s/1Nivkvze24hRH8pXOQleCgw 提取码:gp9z 使用dremio主要原因 : 1)springboot提供了es组件 ...
- docker之tomcat简单部署
将apache-tomcat-8.0.36.tar.gz及jdk-7u79-linux-x64.gz拷贝到创建的tomcat8目录下 在tomcat8目录下创建Dockerfile文件 在Docker ...
- 第4周小组作业:WordCount优化
Github项目地址:https://github.com/chaseMengdi/wcPro stage1:代码编写+单元测试 PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分 ...
- OC数组的简单使用、NSArray
和上一篇文章一样,数组的重要性不言而喻,在OC编程的过程中我们会不断的使用到NSArray,和C语言不同的是,我们这里的数组只能存OC对象类型,不能存C语言基本数据类型,也不能存NSNull类型,但是 ...
- EF学习笔记(十一):实施继承
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里, ...
- 安装Kali的小问题
安装时候的问题 1.安装时程序步骤不正确 在安装kali时,参照视频教程(https://www.mosoteach.cn/web/index.php?c=res&m=index&cl ...
- List、Set、数据结构、Collections
一.数据结构: 1.什么是数据结构: 一种数据的存储方式 2.常见的4+1种数据结构 堆栈结构: 它是只有一个开口的容器结构 特点: 先进后出(FILO) 例子:弹夹,桶装可比克 队列结构: 它是两端 ...