Scala学习笔记之:tuple、array、Map
本文《快学Scala》的笔记
tuple学习笔记
tuple的定义
对偶是元组(tuple)的最简单形态——元组是不同类型的值的聚集。
元组的值是通过将单个值包含在圆括号中构成。Example:(1,1.3415,“Fred”)
tuple的访问
可以通过_1,_2,_3访问元组的元素
val first = tuple._1 //元组的位置从1开始,而非从0开始
拉链操作:zip
通过操作元组,可以把多个值绑在一起,以便它们能够被一起处理,可以通过zip方法完成。
val symbols = Array("<",">")
val counts = Array("1","2")
val paris = symbols.zip(counts)
val map = pairs.toMap
```
##array学习笔记
###数组要点
- 若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer
- 提供初始值时不要使用new
- 用()来访问元素
- 用for(elem <- arr) 来遍历元素
- 用for(elem <- array if ...) ... yield 来将原数组转型为新数组
- Scala数组和Java数组可以互操作,用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数。
###定长数组
如果数组长度不变,则可使用scala中的Array,例如:
```scala
val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0
val string = new Array[String](10) //10个元素的字符串数组,所有元素被初始化为null
val s = Array("hello","scala") //长度为2的Array[String]——类型是推断出来的。已提供初始值,不需要new
变长数组
对于那种长度按需要变化的数组,Java有ArrayList,C++有vector。Scalable中有等效的数据结构为:ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
//或者new ArrayBuffer[Int]
//一个空的数组缓冲,准备存放整数
b += 1 //ArrayBuffer(1),用+=在尾部添加元素
b += (1,2,3,4) //在尾部添加多个元素
b ++= Array(8,12,13) //可以用++=操作符追加任何集合
b.trimEnd(5) //移除最后5个元素
//在任意 位置添加元素
b.insert(2,6) //在下标2之前插入
b.insert(2,6,7,8) //在下标2之前插入6,7,8
b.remove(2) //移除下标为2的位置开始移除元素
b.remove(2,3) //从下标为2开始移除3个元素;第二个参数是表示移除元素的个数
在使用时,有时不确定数组需要装元素的个数。此时,可以先构建一个数组缓冲,然后调用
b.toArray //将缓冲数组转换为定长数组
定长数组也可以转换为缓冲数组
a.toBuffer
遍历数组和数组缓冲
使用for循环遍历数组和数组缓冲
- 使用下标的方式
for (i <- 0 until a.length){
println( i + ":" + a(i))
}
until用法扩展:
- 这只步长
scala 0 until (a.length,2)
- 从数组尾部开始
scala (0 until a.length).reverse
- 不使用下标访问数组元素
for (elem <- arrName) {println(elem)}
数组转换
val a = Array(2,3,4)
val result = for (elem <- a) yield 2 * elem
for (elem <- a if elem %2==0) yield 2 * elem
常用算法
- sum: Array(1,2,3).sum
- max/min : Array(1,2,3).max/min
- sorted : Array(1,2,3).sorted(_ < ) ; Array(1,2,3).sorted( > _) //不能对缓冲数组排序
- quickSort方法排序:scala.util.Sorting.quickSort(a)
- 显示数组内容:mkString; a.mkString(" and ") //可以设置分隔符
多维数组
val matrix = Array.ofDimDouble
Map学习笔记
构造映射
val scores = Map("alice" -> 10,"Bob" -> 12)
val scores = Map(("alice",10),("Bob",2))
获取映射中的值
val bob = scores("Bob")
//验证是否包含某个指定的键
val bobscore = if (scores.contains("Bob")) scores("Bob") else 0
快捷方式:val bobscores = scores.getOrElse("Bob",0)
- 为映射添加多个关系:scores += ("bob" -> 2,"t" -> 3)
迭代映射
通过循环即可遍历映射中所有的键/值对偶
for ((k,v) <- ma) 处理k,v
只访问key和value
- keySet :scores.keySet
- values:scores.values ;for (v <- scores.values) println(v)
排序
val scores = scala.collections.immutable.SortedMap(scores)
Scala学习笔记之:tuple、array、Map的更多相关文章
- scala学习笔记(8): 列表的map,flatMap,zip和reduce
map,flatMap,zip和reduce函数可以让我们更容易处理列表函数. 1 map函数map将一个函数应用于列表的每一个元素并且将其作为一个新的列表返回.我们可以这样对列表的元素进行平方: s ...
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- javaSE学习笔记(11)--- Map
javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...
- [Scala]Scala学习笔记三 Map与Tuple
1. 构造映射 可以使用如下命令构造一个映射: scala> val scores = Map("Alice" -> 90, "Kim" -> ...
- JavaScript学习笔记(六)——Map、Set与iterable
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- Scala学习笔记(四)—— 数组
定长数组Array 定义定长数组用Array,有如下几种方法: 初始化一个长度为8的定长数组,其所有元素默认值均为0 scala> new Array[Int](8) res0: Array[I ...
- Scala学习笔记(详细)
第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
随机推荐
- jquery中$.ajax的$.get与$.post使用
<script type='text/javascript' src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ve ...
- web开发 关于src跳转
src跳转看传递的参数值,如果参数值一样就不会再次跳转,也不会向后台的服务器提供request. 想要随时都能跳转可以传递不同的参数,如 onClick="this.src='http:// ...
- Cloud Foundry中 JasperReports service集成
Cloud Foundry作为业界第一个开源的PaaS解决方案,正越来越多的被业界接受和认可.随着PaaS的发展,Cloud Foundry顺应潮流,充分发挥开源项目的特点,到目前为止,已经支持了大批 ...
- 动态内存分配(new)和释放(delete)
在之前我们所写过的程序中,所必需的内存空间的大小都是在程序执行之前就已经确定了.但如果我们需要内存大小为一个变量,其数值只有在程序运行时 (runtime)才能确定,例如有些情况下我们需要根据用户输入 ...
- VBox UUID already exists 问题处理
问题说明: 在win7系统下使用vbox时,有时候需要多台相同操作系统和开发环境的虚拟电脑时,如果重复安装,会比较麻烦.那么可以在vbox中创建一个新的虚拟电脑B,但不创建虚拟硬盘,然后拷贝虚拟电脑A ...
- extjs中combobox默认显示第一个值
在进入页面时往往用户希望页面能够显示默认的内容,但是页面中会存在一些选项通过用户选择之后才会加载相应的内容.在这篇文章里面介绍了如何去设置页面中默认的内容,如combobox默认显示第一个值. 页面: ...
- js 获取页面高度和宽度(兼容 ie firefox chrome),获取鼠标点击位置
<script> //得到页面高度 var yScroll = (document.documentElement.scrollHeight >document.documentEl ...
- Python学习笔记:02数据类型
Python 数据类型 python中标准的数据类型有 基础类型 整型(长整型) 浮点型 复数型 布尔型 序列类型 字符串 列表 元组 字典 整型 整型和长整型并不严格区分,整型int的表达范围和计算 ...
- C# windows窗体程序打包安装及卸载
一.新建安装部署项目
- MyBatis Generator generatorConfig.xml配置详解
所有Generator的xml详细说明见:http://mybatis.org/generator/configreference/xmlconfig.html (英文版) 引用 http://blo ...