scala-03Tuple、Array、Map

scala-03TupleArrayMap

Map映射

映射和和元组,也就是MapsTuplesMap这东西应该都挺明白的,就是键值对的集合。在Scala中,Map是对偶(算是键值对的另一个说法吧)的集合。->操作符用来创建对偶,"Alice" -> 10产出 ("Alice", 10),keyvalues

1更改对偶:

1)可变的Map,更改某个已有的值,或者是添加一个没有的对偶:

scores("scala") = 7

(2)添加多个对偶,使用“+=”操作符:

Score+=(“hadoop”->3,”spark”->5, ...)

(3)移除某个对偶,使用“-=”操作符: 

Score-=“hadoop”

(4)不可变的Map来说,操作基本都会是返回一个新的Map

// 获取一个添加了新对偶的Map

val newScores = scores + ("Bob" -> 10, "Fred" -> 7)

// 获取一个移除了对偶的Map

val newScores = scores - "Alice"

2、获取Map中的值

val bobsScore = scores("scala")

Map中没有包含这个键值对,会抛出一个异常。用 contains()方法来检查是否包含指定的键。

val bobsScore=if(scores.contains(“scala”))scores(“scala”)else 0

或:val bobsScore = scores.getOrElse("Bob", 0)

3、迭代map

for ((k, v) <- map)    

for (k <- map.keySet)  // 单独拿出键

for (v <- map.values)  // 单独拿出值

元组tuple(不可变)

Scala中,元组是n个对象的一个聚集(Mapn=2个对象的聚集),元组可以包含不同类型的元素

1,元组也是不可变的,但是元组可以是不同类型的数据

2,实例化:var a = (,)

3,可以通过点号,下划线,-NN1开始)的索引访问元素

 def main(args:Array[String]):Unit{   //访问组元

val triple=(100,”scala”,”hadoop”)  //类型为tuple3[int,sting,string]

Println(triple._1)    //triple._1,2,3方法,从1开始

Println(triple._2)

Println(triple._3)

}

// 通常是使用模式匹配来获取组元的

val (first, second, third) = t

// 如果说不是所有的组元都需要,那么在不需要的地方放上_

val (first, second, _) = t

 

val array=Array(1,2,3,4,5)

for(i<-0 until array.length){

Println(array(i))

}

以上程序等价于:

   for(elem<-array){

Println(elem)

}

List列表(不可变)

1,类型都是相同的

2,不可变的,(Array虽然长度固定,但是元素之使可变的)

3(:::)实现叠加List,(::)cons:将新元素组合到列表的最前端

val list1= 1 :: 2 :: 3 :: 4 :: Nil 

Println(list1)

Val list2= 2:: 4 :: 5 :: 6 :: Nil

Println(list2)

Val list3=list1 ::: list2

Println(list3)

//返回list3为:list2,4,5,6,1,2,3,4

带类型的参数化数组Array(可变亦可不变)

val greetStrings= new Array[String](3)

其中Array[String]变量greetStrings的类型,3为实例初始化参数。

Scala里的数组是通过把索引放在圆括号里面访问的,而不是像Java那样放在方括号里。所以数组的第零个元素是greetStrings(0),不是greetStrings[0]

Scala如何看待val的意义的重要概念。当你用val定义一个变量,那么这个变量就不能重新赋值,但它指向的对象却仍可以暗自改变。所以在本例中,你不能把greetStrings重新赋值成不同的数组;greetStrings将永远指向那个它被初始化时候指向的同一个Array[String]实例。但是你能一遍遍修改那个Array[String]的元素,因此数组本身是可变的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值