Scala数据结构(数组,Map和Tuple)
- package com.zy
- import scala.collection.mutable
- import scala.collection.mutable.ArrayBuffer
- object test3 {
- def main(args: Array[String]): Unit = {
- //function1()
- //function2()
- //function3()
- //function4()
- //function5()
- //function6()
- //function8()
- //function9()
- function10()
- }
- //数组
- //不变长度数组(真数组)
- def function1():Unit={
- val ints=new Array[Int](20)
- //赋值
- ints(3)=999
- for (i<- ints){
- println(i)
- }
- var arr=Array(1,"中国",9.9)
- for (s<- arr){
- println(s)
- }
- //取值 (下标)
- println(arr(1))
- }
- def function2():Unit={
- val arr=Array.fill(3)(math.random)
- for (s<- arr){
- println(s)
- }
- }
- //变长数组
- def function3():Unit={
- val ab1=new ArrayBuffer[String]()
- val ab2=ArrayBuffer[Int](100,200)
- //ab1.insert(4,"中国","日本")//Exception in thread "main" java.lang.IndexOutOfBoundsException: 4
- ab1.insert(0,"中国","日本")
- /*for (v<- ab1){
- println(v)
- }*/
- ab1+=("美国","法国")//追加 符号更加简约
- for (v<- ab1){
- println(v)
- }
- ab1++=Array("1","3","6")//追加任何集合
- println("----------------------")
- for (v<- ab1){
- println(v)
- }
- ab1.insert(1,"菲律宾")//在第一个元素后面
- println("----------------------")
- for (v<- ab1){
- println(v)
- }
- println("----------------------")
- for (v<- ab1 if v!="日本"){
- println(v)
- }
- }
- def function4():Unit={
- val arr=ArrayBuffer[Int](1,4,5,6,0)
- val res=for (i<- 0 until arr.length) yield arr(i)*2
- println(res)
- // _代表数组中每个元素
- //arr.filter(_>0) 判断数组中大于0的元素,返回一个数组
- //map(_*2) 每个元素乘于2
- arr.filter(_>0).map(_*2).foreach(println(_))
- }
- def function5():Unit={
- var arr=Array(6,1,9,0,7)
- println(arr.max)
- println(arr.sum)
- arr.sorted.foreach(println(_))//升序
- println("-----------")
- // _>_ 两个元素比较,大的放前面 降序
- arr.sortWith(_>_).foreach(println(_))
- println("---------------")
- arr.sortWith(_>_).foreach(println(_))//升序
- println(arr.mkString("And"))//分隔符
- println(arr.mkString("<",",",">"))//<6,1,9,0,7> //指定前缀、分隔符、后缀
- }
- //多维数组
- def function6():Unit={
- var array=new Array[Array[Int]](5)
- array(0)=Array(1,4,5)
- array(1)=Array(2,4,5)
- array(2)=Array(6,4,5)
- for (a<-array if a!=null;v<-a){//双层循环
- println(v)
- }
- println("-------------------")
- var arr2=Array(Array(1,2,3),Array(4,5,6),Array(7,8,9))
- for (a<-arr2 ;v<-a){
- println(v)
- }
- }
- def function7():Unit={
- val arr=Array(4,5,7)
- //把定长转变长
- val buffer = arr.toBuffer
- buffer.foreach(println(_))
- //变长转定长
- val ab2=ArrayBuffer[Int](100,200)
- val array=ab2.toArray
- }
- //Map
- def function8():Unit={
- //不可变map(值不能改变)
- var p=Map("aa"->12,"bb"->15,"cc"->28)
- // ->是用来创建元组("aa",12) ("bb",15) ("cc",28)
- //元组:("a",1.99,33,"b") 一组数据【任意类型】
- println(p.get("aa"))//Some(12)
- println(p.get("pppp"))//None
- //可变map(值可变)
- val p2=scala.collection.mutable.Map("xx"->11,"yy"->22)
- //空的可变map
- val hashMap = new mutable.HashMap[String,Int]
- //取值
- println(p2.get("pp"))
- println(p2.getOrElse("xx",999))// 如果映射包含键“xx",返回对应的值;否则,返回999
- //更新Map中的值
- p2("xx")=100
- println(p2.get("xx"))
- //追加
- p2+=("g"->1,"h"->2);
- println(p2)
- //移除
- p2-=("xx")
- println(p2)
- //不可变映射 也可以追加
- p+=("zz"->999,"mm"->888)
- println(p)
- p-=("aa")
- println(p)
- //遍历map
- for ((k,v)<-p){
- println("k:"+k+"\t"+"v:"+v)
- }
- //遍历键的集合
- for (k<- p.keySet) println("k:"+k)
- //遍历值的集合
- for (v<- p.values) println("v:"+v)
- println("-------------------------")
- //键
- p.foreach(me=>println(me._1))
- //值
- p.foreach(me=>println(me._2))
- //键值对
- p.foreach(println(_))
- println("--------------------------------")
- //反转键值对
- for ((k,v)<- p) yield println(v,k)
- var newMap=for ((k,v)<- p) yield(v,k)
- println(newMap)
- }
- def function9():Unit={
- // 会按照key的字典顺序进行排序
- val mm= scala.collection.immutable.SortedSet("f"->9,"a"->3,"w"->8)//按照字典顺序排序
- println(mm)
- val months = scala.collection.mutable.LinkedHashMap("January" -> 1,"February" -> 2,"March" -> 3) // 创建一个顺序的Map
- months += ("Fourth" -> 4)
- println("months=> " + months) // months=> Map(January -> 1, February -> 2, March -> 3, Fourth -> 4)
- }
- //元组
- def function10():Unit={
- val tup=(105,"中国")
- //空格在拼接多个过程中会引起歧义
- println(tup._1+"\t"+tup._2)
- //元组最大 Tuple22 Tuple3里面有3个元素
- val tup2 = new Tuple3[String,Int,Int]("aa",11,44)
- val (a,b,c)=tup2
- println(a)
- println(b)
- println(c)
- //分组 按元素(_)是否是大写区分
- println("NewAbcD".partition(_.isUpper))//分组后形成元组
- //遍历
- tup2.productIterator.foreach(println(_))//最简单方式,但是不让拼接"\t"
- println()
- tup2.productIterator.foreach(x=>println(x+"\t"))
- }
- }
Scala数据结构(数组,Map和Tuple)的更多相关文章
- Scala编程入门---Map与Tuple
创建Map //创建一个不可变的Map val ages = Map("Leo" -> 30,"Jen" ->25,"Jack" ...
- Scala实战高手****第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏
本课内容1.Map和Tuple在Spark源码中的鉴赏2.Map和Tuple代码操作实战 ------------------------------------------------------- ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- [Scala]Scala学习笔记三 Map与Tuple
1. 构造映射 可以使用如下命令构造一个映射: scala> val scores = Map("Alice" -> 90, "Kim" -> ...
- Scala Map与Tuple
创建Map // 创建一个不可变的Map val ages = Map("Leo" -> 30, "Jen" -> 25, "Jack&q ...
- scala 数据结构(六):映射 Map
1 映射 Map-基本介绍 Scala中的Map介绍 1) Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的, ...
- 10. Scala数据结构(上)-集合操作
10.1 数据结构特点 10.1.1 Scala集合基本介绍 uml => 统一建模语言 1) Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问 两个主要的包 不可变集合:s ...
- 《快学Scala》——数组、映射和元组
数组 定长数组:在Scala中可以用Array,初始化一个定长数组.例如: val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new ...
- Scala数据结构
Scala数据结构 主要的集合特质 Scala同时支持可变集合和不可变集合,优先采用不可变集合.集合主要分为三大类:序列(List),集(set),映射(map).所有的集合都扩展自Iterable特 ...
随机推荐
- Akka Typed 官方文档之随手记
️ 引言 近两年,一直在折腾用FP与OO共存的编程语言Scala,采取以函数式编程为主的方式,结合TDD和BDD的手段,采用Domain Driven Design的方法学,去构造DDDD应用(Dom ...
- day119:MoFang:宠物的状态改动&宠物粮道具的使用&宠物死亡处理
目录 1.宠物的状态改动 2.宠物粮道具的使用 3.宠物死亡处理 1.宠物的状态改动 1.在setting表中为每个宠物配置生命周期时间 因为宠物有多个,每个宠物会有不同的初始生命的饥饿时间,所以我们 ...
- 【Java基础】集合
集合 集合概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储.另一方面,使用 Array 存储对象方面具有一些弊端,而 Java 集合就像一种容器 ...
- Linux性能相关命令
Linux性能相关命令 目录 Linux性能相关命令 1. 查看硬盘相关信息 2. 查看CPU相关信息 3. 查看内存相关信息 4. 查看进程运行的信息 1. 查看硬盘相关信息 cat /proc/s ...
- SAP 修改表和表中数据
平时修改表中数据的方式有一下几种: 1.一般就是通过SE11或者是SE16进去,找到那条记录,然后将模式变成EDIT,然后修改保存. 2.通过SQL语句在程序中实现数据库表的修改操作 3.通过SE16 ...
- 24V降压3.3V芯片,低压降线性稳压器
PW6206系列是一款高精度,高输入电压,低静态电流,高速,低压降线性稳压器具有高纹波抑制.在VOUT=5V&VIN=7V时,输入电压高达40V,负载电流高达300mA,采用BCD工艺制造.P ...
- Python赋值、浅复制和深复制
Python赋值.浅复制和深复制 首先我们需要知道赋值和浅复制的区别: 赋值和浅复制的区别 赋值,当一个对象赋值给另一个新的变量时,赋的其实是该对象在栈中的地址,该地址指向堆中的数据.即赋值后,两 ...
- 图解ARP协议
前置知识:MAC地址 在说到ARP协议之前,需要了解MAC地址,在OSI七层模型中,第三层是网络层,要解决的是下一跳机制确定的设备位置,具体来说就是网卡地址,MAC地址用于在网络中唯一标示一个网卡,一 ...
- Web自动化测试python环境中安装 --selenium安装、火狐和火狐驱动版本、谷歌和谷歌驱动版本、测试
一.安装selenium Windows命令行(cmd)输入pip install selenium(无须指定版本默认最新)或 pip install selenium==3.141.0(可指定版本) ...
- 跨度实际上是用来计算排位(rank) 目标节点在跳跃表中的排位 有序集 排序计算
跳跃表的实现 - Redis 设计与实现 http://redisbook.com/preview/skiplist/datastruct.html 有序集合 /* ZSETs use a speci ...