5、Scala基础之Map与Tuple

创建Map

创建一个不可变的Map,import scala.collection.mutable.Map

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt("Zhao") = 19

上述代码如果会报错,Error:(12, 5) value update is not a member of scala.collection.immutable.Map[String,Int]
stringToInt("Zhao") = 19
创建一个可变的Map,

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt("Zhao") = 19
    println(stringToInt("Zhao"))

当然,还有一种定义map的方法,使用()

    val stringToInt2 = Map(("zhao",22),("jun",23),("feng",24))

创建一个空的HashMap

    val nameToAge = new HashMap[String, Int]

访问Map的元素

获取指定key对应的value,如果key不存在,会报错

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt("Zhao") = 19
    println(stringToInt("Zhao"))
    println(stringToInt("zhao"))

会报,java.util.NoSuchElementException: key not found: zhao
使用contains函数检查key是否存在

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    var age = if(stringToInt.contains("Zhao")) stringToInt("Zhao") else 0
    println(age)
    age = if(stringToInt.contains("zhao")) stringToInt("zhao") else 0
    println(age)

getOrElse函数

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    var age = stringToInt.getOrElse("Zhao", 0)
    println(age)
    age = stringToInt.getOrElse("zhao", 0)
    println(age)

修改Map的元素

更新Map的元素

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt("Zhao") = 50

增加多个元素

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt += ("Xiang" -> 21, "Bin" -> 22)

移除元素

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    stringToInt -= "Zhao"

更新不可变的map,生成新的map

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    val stringToInt2 = stringToInt + ("Xiang" -> 21, "Bin" -> 22)

移除不可变map的元素,生成新的map

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    val stringToInt2 = stringToInt - "Zhao"

遍历Map

遍历map的entrySet

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    for((key, value) <- stringToInt){
      println(key + "," + value)
    }

遍历map的key

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    for(key <- stringToInt.keySet){
      println(key)
    }

遍历map的value

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    for(key <- stringToInt.values){
      println(key)
    }

生成新map,反转key和value

    val stringToInt = Map("Zhao" -> 18, "Jun" -> 19, "Feng" -> 20)
    val intToString = for((key, value) <- stringToInt) yield (value, key)
    for((key, value) <- intToString) {
      println(key + ", " + value)
    }

SortedMap和LinkedHashMap

SortedMap可以自动对Map的key的排序

    val stringToInt = SortedMap(("Zhao",18),("Jun", 19))
    for((key, value) <- stringToInt) {
      println(key + "," + value)
    }

LinkedHashMap可以记住插入entry的顺序

    val stringToInt2 = new mutable.LinkedHashMap[String, Int]
    stringToInt2 += (("Zhao",18),("Jun", 19))
    for((key, value) <- stringToInt2) {
      println(key + "," + value)
    }

Map的元素类型—Tuple

简单Tuple

    val t = ("hello", 18)

访问Tuple

    println(t._1)
    println(t._2)

zip操作

    val name = Array("zhao","qian","sun","li")
    val age = Array(18,19,20,21)
    val nameToAge = name.zip(age)
    for((key,value) <- nameToAge) {
      println(key + "," + value)
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值