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 ...
随机推荐
- 低字节序和高字节序相互转换(Little Endian/Big Endian)
这个例子展示了如何转换整形数字的字节顺序,该方法可以用来在little-endian和big-endian之间转换. 说明:Windos(x86,x64)和Linux(x86,x64)都是little ...
- 纯蓝ICON_学习教程
- 疯狂学习java web4(jsp)
JSP与PHP.ASP.ASP.NET等语言类似,运行在服务端的语言. JSP(全称Java Server Pages)是由Sun Microsystems公司倡导和许多公司参与共同创建的一种使软件开 ...
- [转]python对json的相关操作
json官方说明参见:http://json.org/ Python操作json的标准api库参考:http://docs.python.org/library/json.html 对简单数据类型的e ...
- 【转】.NET开发者必备的11款免费工具
摘要:本文介绍一些最适合.NET开发人员简化Web开发的最佳工具,这些工具都是开源的,有的开发工具你既可以从网上下载可执行文件,也可以下载源代码.一些工具拥有可扩展的框架,是一个持续集成工具. 原文链 ...
- dict两种遍历方法
采用for...in...遍历: >>> for i in dd: ... print("%s:%s"%(i,dd[i])) ... :chen :hang :w ...
- java面试(毕业一年后准备换工作)
还记得一年前的今天,在网上投简历,找工作,当时找的工作的工作地点都在成都,其实自己挺想去外面工作几年的,如果毕业后就在成都工作,今后基本不可能去外省了, 所以刚好上海的一家外包公司来成都理工校招,导员 ...
- 转:Node.js邮件发送组件- Nodemailer 1.0发布
原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...
- angular2 学习笔记 ( Component 组件)
refer : https://angular.cn/docs/ts/latest/guide/template-syntax.html https://angular.cn/docs/ts/late ...
- DEV控件的使用(二次封装BaseUI)
一:DEV的安装 直接点击exe文件安装,安装完成之后,将控件添加到工具栏,如下图添加即可 二:注意事项 项目使用的是二次封装的BaseUI,有些属性和事件在BaseUI的控件中由于太多不能全部显示, ...