scala学习笔记(4)映射和元组
2024-10-07 07:59:57
1.构造映射
//构造这样的一个映射
val sources=Map("Alice"->,"Bob"->,"Cindy"->) //构造了一个不可变的Map[String,Int],值不能改变,
//可变映射
val scores = new scala.collection.mutable.HashMap[String,Int]
//映射是对偶的集合。简单来说就是两个值构成的组,这两个值不一定适合同一类型的,如("Alice",10)。->操作符用来创建对偶:
"Alice"-> 改代码产出的值是:("Alice",)
2.获取映射中的值:在scala中,函数和映射之间的相似性尤为明显,因为用()表示法来查找某个键对应的值
val bobsScore = if (scores.contains("Bob")) scores("Bob") else 0
val bobSource=sources("Bob") //类似于Java中的sources.get("Bob"),如果映射中不包含请求中使用的键值,就会抛出异常
创建可变map
scala>val map = new scala.collection.mutable.HashMap[Int,Int]
scala>val map = new scala.collection.mutable.HashMap[Int,Int]() //调用apply方法 3.更新映射中的值,在可变映射中,可以更新某个映射的值,或者添加一个映射关系,做法是在=号左侧使用():
scores("bob")=10 //更新"bob"对应的值
scores("Fred")=7 //更新新的键值对/值对偶到scores(假定是可变的)
scores+=("Bob"->10,"Fred"->7) //通过+=操作添加多个关系
scores-="Alice" //通过-=移除某个键值对
val newScores = scores+("Bob"->10,"Fred"->7) //更新过的新映射,newScores映射包含了与scores相同的映射关系
并且"Bob"也被更新,"Fred"被添加进来了 var scores=....
scores =scores+("Bob"->10,"Fred"->7) //更新var变量 要从不可变映射中移除某个键,需要用-操作符来获取一个新的去掉该映射:
scores =scores -"Alice"
4.迭代操作
for((k,v)<-映射) //循环遍历映射中的所有键值对偶
scores.keySet //一个类似Set("Bob","Cindy","Fred","Alice")这样的集合
for(v<-scores.values) println(v) //将打印10 8 7 10 for((k,v)<- 映射) yield(v,k) //翻转一个映射,交换键和值的位置
5.已排序映射
得到一个不可变的树形映射
val scores = scala.collection.immutable.SortedMap("Alice"->10,"Fred"->7,"Bob"->3,"Cindy"->8)
6.与java的互操作
import scala.collection.JavaConversions.mapAsScalaMap //通过制定的scala映射类型来触发转换
val scores:scala.collection.mutable.Map[String,Int0=new java.util.TreeMap[String,Int] import scala.collection.JavaConversions.propertiesAsScalaMap
val props :scala.collection.map[String,String]=System.getProperties
7.元组
映射是键/值对偶的集合;对偶是元组的最简单形态,元组是不同类型值的聚集
元组的值是通过将的单个的值包含在圆括号中构成的:(1,3.14,"Fred")是一个元组,类型为Tuple3[Int,Double,java.lang.String]
类型定义也可以写为(Int,Double,java.lang.String)
eg:val t = (1,3.14,"Fred") 可以通过_1、_2、_3访问其元组
val second =t._2 //将second设置为3.12 ,这个地方可以把t._2写为t _2(用空格而不是句点),但是不能写成t_2.
使用模式匹配的方式来获取元组的组元,如:val (first,second,thrid)=t //将first设置为1,second设置为3.14,thrid设置为为"Fried"
如果不是所有的部件都需要,那么可以在不需要的部件上用_:val (first,sceond,_)=t 元组可以用于函数需要返回不止一个值的情况。维数最高22
元组tuple scala>val t = (1,"tom",12)
8.拉链操作
Zpping咬合操作。使用元组的原因之一就是把多个值绑定在一起,以便他们能够被处理
下面代码:
val symbols = Array("<","-",">")
val counts = Array(,,)
val pairs = symbols.zip(counts) //输出对偶数组:Array(("<",2),("-",10),(">",2)),这些对偶可以被一起处理:
for((s,n)<pairs) Console.print(s*n) //会打印
//数组
最新文章
- 浅入浅出EmguCv(一)OpenCv与EmguCv
- pl/sql developer——instant-client 简单配置
- ifconfig
- Linux 安装配置Subversion edge
- linux目录
- http://blog.csdn.net/bluejoe2000/article/details/39521405#t9
- linux下如何删除文件夹
- redis缓存工具Jedis进行跨jvm加锁(分布式应用)--不幸暂弃用--能够做第三方锁使用
- PigCms 回复消息 ";域名授权错误! 您使用的微信平台或源码为盗版";
- 全栈JavaScript之路(十七)HTML5 新增字符集属性
- sina微博上看到的关于android界面设计相关的规范
- Unity3D ——强大的跨平台3D游戏开发工具(一)
- 向EXECL文件中导入数据的同时插入图片
- [WinForm]dataGridView自定动态设定序号列框
- cdnbest里如何查看网站是否被缓存
- strstr函数字符串匹配问题
- cxf之生成客户端代码
- TCP/IP分析
- windows下php7安装redis扩展
- 【NodeJs】入门笔记一
热门文章
- 删除操作——str.subString(0,str.length()-1)
- CodeForces 1200D White Lines
- java agent问题
- Spring Boot教程(十三)整合elk(2)
- sqli-labs(26a)
- 不属于java语言鲁棒性特点的是
- android界面的滑动切换功能
- HDU4497 GCD and LCM(数论,质因子分解)
- trim配合prefix,prefixOverrides,suffix,suffixOverrides构建动态sql语句
- SOUI中对象的生命周期管理