Chapter04 Scala映射和元组

x33g5p2x  于2021-03-14 发布在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(330)

1. 构造映射

映射是键值对偶的集合,映射只做查询。

构造一个不可变的Map[String, Int]。

    val scores = Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13) // 这两种方法等价
    val scores = Map(("Alice", 10), ("Aaron", 20), ("Bob", 13))     
  • 构造一个可变的映射。
    val scores = scala.collection.mutable.Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
  • 构造一个空的映射。
    // chapter01 中提到如果没有初始化是要用new函数的
    val scores = new scala.collection.mutable.HashMap[String, Int]

2. 获取映射中的值

  • 若映射不包含请求中使用的键,要检查有某个键要用contains方法,组合语句是getOrElse。
    val Bobscore = scores("Bob")    // 获取“Bob"对应的值
    val bobsocre = if (scores.contains("BoB")) scores("Bob") else 0
    val bobsocre = scores.getOrElse("Bob", 0) // 与上面的第二条语句等价

3. 更新键中的值

  • 映射可变
    socres("Bob") = 10   // 更新键“Bob”值
    scores("Fred") = 7   // 添加新键值对
    scores += ("Bob" -> 10, "Fred" -> 7) // +=可以添加多个
    socres -= "Alice"    // 移除某个键值对
  • 若映射是不可变的,可以用同样的方法获取一个包含所需要的更新的新映射。
    val newScores = scores + ("Bob" -> , "Fred" -> 7)
  • 还可以将scores定义为var直接更新var变量。
    var scores = Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
    scores = scores + ("Bob" -> 13, "Fred" -> 7)
    scores = scores - "Alice"   // 移除某个键值对

4. 迭代映射

  • for ((k, v) <- 映射)就可以遍历所有键值对。若只需访问键或值,用valueskeySet方法。
    for ((k, v) <- scores) println(k + v)
    for (k <- scores.keySet) println(k)
    for (v <- scores.values) println(v)

5. 已排序映射

  • 要的的一个不可变的树形映射而不是默认的哈希映射的话,可以用:
    val scores = scala.collection.immutable.SortedMap("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
  • scala中可变的树形映射还没有

6. 元组

元组(tuple ['tjup(ə)l])是不同类型的值的聚集,映射是键值对偶的集合,对偶是元组的最简单形态。

访问元组的组元,用_1、_2、_3方法,元组下表是从1开始。

    val t = (1, 2.2323, "Bob")
    val second = t._2
    val second = t _2//点也可以用空格来表示
  • 用模式匹配来获取元组的组元,不需要的组元用_表示。
    val (first, second, third) = t
    val (first, second, _) = t
  • 元组可用于函数返回多个值得情况。

7. 拉链操作

  • 元组就是把多个值绑定在一起,可以用zip操作,toMap方法将对偶转成映射。
    val name = Array("Bob", "Fred")
    val scores = Array(2, 4)
    val pairs = name.zip(counts) // 得到元组
    val score = pairs.toMap      // 转成映射(哈希表)

【待续】

相关文章