学习Scala中Set和Map
object Demo07 {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
//创建定长Set
val s1=Set(1,1,2,2,3) //> s1 : scala.collection.immutable.Set[Int] = Set(1, 2, 3)
//创建变长Set
val s2=scala.collection.mutable.Set(1,2,3) //> s2 : scala.collection.mutable.Set[Int] = Set(1, 2, 3)
//创建一个定长Map。
val m1=Map("tom"->23,"rose"->18) //> m1 : scala.collection.immutable.Map[String,Int] = Map(tom -> 23, rose -> 18
//| )
//创建一个变长Map,可以追加kv对
val m2=scala.collection.mutable.Map("tom"->23,"rose"->18)
//> m2 : scala.collection.mutable.Map[String,Int] = Map(rose -> 18, tom -> 23)
//|
//变长Map追加kv对
m2+=("jim"->25,"jary"->30) //> res0: Demo07.m2.type = Map(jary -> 30, jim -> 25, rose -> 18, tom -> 23)
//通过key操作Map
m1.apply("tom") //> res1: Int = 23
m1("tom") //> res2: Int = 23
//get方法也可以通过key获取value,返回的类型是Option(Some or None)
m1.get("tom").getOrElse(0) //> res3: Int = 23
m1.get("werewrw").getOrElse(0) //> res4: Int = 0
//获取所有的key,一般为了便于处理,可以将迭代器转成List或Array再操作
m1.keys.toList //> res5: List[String] = List(tom, rose)
//获取所有的value
m1.values.toList //> res6: List[Int] = List(23, 18)
val m3=Map("tom"->23,"rose"->18,"jim"->25) //> m3 : scala.collection.immutable.Map[String,Int] = Map(tom -> 23, rose -> 18
//| , jim -> 25)
//过滤出m3中年龄>20的数据
//操作Map时,匿名函数的参数是一个(k,v)对
val r1=m3.filter{case(k,v)=>v>20} //> r1 : scala.collection.immutable.Map[String,Int] = Map(tom -> 23, jim -> 25)
//|
val r11=m3.filter{x=>x._2>20} //> r11 : scala.collection.immutable.Map[String,Int] = Map(tom -> 23, jim -> 25
//| )
//对m3映射,人名不变,年龄+10
val r2=m3.map{case(k,v)=>(k,v+10)} //> r2 : scala.collection.immutable.Map[String,Int] = Map(tom -> 33, rose -> 28
//| , jim -> 35)
val r21=m3.map{x=>(x._1,x._2+10)} //> r21 : scala.collection.immutable.Map[String,Int] = Map(tom -> 33, rose -> 2
//| 8, jim -> 35)
//如果在对Map类型映射时,如果key不变,只映射value,
//可以使用mapValues。匿名函数的参数是Map的value
val r3=m3.mapValues { v => v+10 } //> r3 : scala.collection.immutable.Map[String,Int] = Map(tom -> 33, rose -> 28
//| , jim -> 35)
}