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的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...
随机推荐
- GUI学习之二——PyQt控件初识
一.控件概念 控件是一个程序界面上的各个独立的元素, 它具备用户点击.接收用户输入.展示不同内容.存放其他控件等功能. 二.控件分类 常用的控件按功能可以分为以下几种类 按钮 QPushButton— ...
- 检测2个url的不同之处(爬虫分析接口)
就是简单的检测2个url的不同之处,在做爬虫时,要分析接口地址的不同之处,靠自己的眼睛有点累,所以写了一个小程序,不喜勿喷 #测试数据 a = "https://list.tmall.com ...
- 最大熵与最大似然,以及KL距离。
DNN中最常使用的离散数值优化目标,莫过于交差熵.两个分布p,q的交差熵,与KL距离实际上是同一回事. $-\sum plog(q)=D_{KL}(p\shortparallel q)-\sum pl ...
- jmeter本身的一个bug记录
1.使用jmeter测http接口 2.断言接口返回的内容是否包含某串文本 3.结果:总是返回断言失败,即使接口返回的内容包含了该文本 接口返回的值为: {"code":" ...
- 支持向量机(SVM)利用网格搜索和交叉验证进行参数选择
上一回有个读者问我:回归模型与分类模型的区别在哪?有什么不同,我在这里给他回答一下 : : : : 回归问题通常是用来预测一个值,如预测房价.未来的天气情况等等,例如一个产品的实际价格为500元,通过 ...
- 《Linux就该这么学》第十五天课程
本次课所学习的是DNS域名解析服务! 下面提供一些DNS有关的内容 如需进一步学习,请前往https://www.linuxprobe.com/chapter-13.html 工作模式: 1.主服务器 ...
- java+phantomjs实现动态网页抓取
1.下载地址:http://phantomjs.org/download.html 2.java代码 public void getHtml(String url) { HTML="&quo ...
- mybatis批量更新报错badsql
mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...
- XSSearch 说明文档保存
XSSearch All Packages | 属性 | 方法(函数) 包 XS 继承关系 class XSSearch » XSServer » XSComponent 版本 1.0.0 源代码 s ...
- 与我们息息相关的internet服务(2)---WWW服务
在起步一个公司,从组建的技术上,可能要准备很多东西,其中一个就是我们熟悉的公司网站 网站,在初中,那时浏览一个网页可叫网上冲浪,听起来似乎比洗澡还爽快,可现在这词就是土鳖,网上冲浪火起来主要是应 ...