Map映射和Tuple元祖
1. Map映射
Map是一个对偶,映射的k-v键值对的集合,在一个map中可以包含若干组k-v映射关系,前提条件是k不能重复。同样map也有可变和不可变之分。
1.1 不可变Map
不可变数组进行删除修改操作返回的是一个新的数组,原数组是不会改变的。
import scala.collection.immutable.Map
-
定义
因为Map是一个类似java中的接口,无法直接创建对象,所以需要使用它的伴生对象创建。
val map = Map[K, V]()
-
初始化
val map = Map[String, Integer]( ("pgp" -> 27), "jdr" -> 18, "jdr" -> 19, "lhj" -> 38 )
-
crud
/* * 通过get(k)获得的结果为Option(可选的) * 可以将option理解为java中的一个抽象类或者接口 * option有两个仅有的子类: * Some --->代表有值 * None --->没有值 * 获取Some对应的值,可以通过some.get获取,对None调用get会报错 * NoSuchElementException * 所以为了避免这个错误,我们可以调用option的另一个方法规避:getOrElse,getOrElse中也可以同时写上key和value,如果都存在就会返回value的值 */ var gAge = map.get("pgp") println(gAge.get) gAge = map.get("zxn") println(gAge.getOrElse(-1)) println("----获取的另外一种方式-----") println(map("pgp")) //判断key是否包含 if(map.contains("pga")) { println(map("pga")) }
1.2 可变Map
-
定义并初始化
//创建并初始化 val map = mutable.Map[String, Integer]( "zgj" -> 13 )
-
crud
//增加元素 map.put("lsl", 18) println(map) map("csl") = 23 println(map) map.+(("xy", 15))//添加一对kv,并返回一个新的map,原map不变 println(map) map += ("lk" -> 17) println(map) //获取元素--get,和不可变map一模一样 //修改 map("csl") = 33 println(map) //删除 //remove返回值为被删除的key对应的value,类型Option println(map.remove("lk"))
1.3 map的通用操作
-
集合大小
map.size
-
map的遍历
println("-------遍历--------") for(aaa <- map) { println(aaa) } println("-----(k, v)------") for((k, v) <- map) { println(s"k=${k}, v=${v}") } println("-----foreach------") map.foreach(kv => { println(kv._1 + "--->" + kv._2) })
2. Tuple元组
-
定义
元组,其实就是一组对偶,也可以理解为是java中List。映射是键/值对偶的集合。对偶足元组( tuple)的最简单形态,元组是不同类型的值的聚集。元组的值是通过将单个的值包含在圆括号中构成的。例如:(1, 3.14, “Fred”)是一个元组,类型为:Tuple3 [Int, Double, java.lang.String]
-
创建并初始化
说明:元组Tuple是List,但是其长度是有范围的,最长可以容纳22个元素,也即Tuple22,其中Tuple1可以简写为Tuple。
val t = new Tuple2[String, Int]("陈腾", 18) or val tt = ("陈腾", 18)
-
操作
val t = new Tuple2[String, Int]("陈腾", 18) val tt = ("陈腾", 18) //获取tuple中的某一个元素 println("name: " + tt._1) println("age: " + tt._2) val weekdays = ("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN") for (a <- weekdays.productIterator) { println(a) } println("----------------------") val season = ("春", "夏", "秋", "冬") val (spring, summer, autumn, winter) = ("春", "夏", "秋", "冬") println("spring: " + spring) println("summer: " + summer) println("autumn: " + autumn) println("winter: " + winter)