Scala的映射和元组操作
2019-11-29

映射和元组操作

构造Map

// 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12, "Bob" -> 20) // 也可以这种创建一个Map映射 val score1 = Map(("Jack", 12), ("Bob", 20)) // 根据key获取value,类似java中的map.get(key)若是获取一个不存在的key则会报错而不是null println(score("Jack")) // 获取元素不存在给出无元素提醒 val flag = if (score.contains("haha")) score.get("haha") else "no such element" val flag1 = score.getOrElse("haha", "no such element") // 创建可变Map val score = scala.collection.mutable.Map("Jack" -> 12, "Bob" -> 20)更新映射中的值

在可变的映射中,可以更新某个映射的值,在=号左侧使用():// 更新可变的Map的值scores("Bob") = 10// 添加新的key-valuescores("haha")=7// 也可以使用+=操作和创建映射关系scores +=("Michael" -> 22)// 移除某个键对应的值score -=("Michael")迭代映射

for((k,v) <- 映射) 这种可以得到每一个的键值对// 和java一样可以使用keySet和values方法,values方法将会返回一个iterablescore.keySet // 返回类似("Bob","Michael")// 获取map的valuefor (v <- score.values) println(v)

排序映射

操作映射时,需要选定一个实现---哈希表或者平衡树,默认情况Scala中式hash表,若想顺序访问所有的键,因此需要一个树形映射

val scores = scala.collection.immutable.SortedMap("Bob" -> 10,"michael" -> 12)与java的互操作

// import scala.collection.javaConversions.mapAsScalaMap 然后指定Scala映射类型触发转换val scores:scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String,Int]// import scala.collection.javaConversions.propertiesAsScalaMapval props :scala.collection.Map[String,String] = System.getProperties()// 以上都是将java的map转为Scala的map,可以将Scala的map转为java的maoimport scala.collection.javaConversions.mapAsJavaMap元组

映射式键值对的集合,对偶式元组(tuple)的最简单的形态---而元组式不同类型值得聚集

(1,95.27,"Bob") 是一个元组类型为(Int,Double,java.lang.String)可以方法_1,_2,_3访问元组例如以下元组: val l = (1,2.34,"哈哈") println(l._2)拉链操作

// 使用元组可以将他们映射起来使用zip方法 val symbols = Array("<","-",">") val counts = Array(2,10,2) val pairs = symbols.zip(counts) println(pairs.toBuffer) // 打印<<---------->> for ((s,n) <- pairs) Console.print(s * n)