映射和元组

1.构造映射

  • 构造不可变的Map[String,Int],其值不能被改变。

    val scores = Map("Alice" -> 10, "Bob" -> 10, "Cindy" -> 8)

  • 构造可变映射

    val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)

  • -> 操作符来创建对偶

    "Alice" -> 10

  • 也可以用下面的方式来定义映射

    val scores = Map(("Alice", 10),("Bob", 3),("Cindy", 8))

2.获取映射中的值

  • 在Scala中,函数和映射之间的相似性尤为明显,将使用()表示法来查找某个键对应的值。

    val bobsScore = scores("Bob")

  Tips:如果映射不包含请求中使用的键,则会抛出异常

  • 要检查映射中是否有某个指定的键,可以用contains方法:

    val bobsScore = if (score.contain("Bob")) scores("Bob") else 0

  Tips:由于这样的组合调用十分普遍,以下是一个快捷写法:

    val bobsScore = scores.getOrElse("Bob", 0)

  Tips_2:映射.get(键)这样的调用返回一个Option对象,要么是Some(键对应的值),要么是None。

 

3.更新映射中的值

  • 在可变映射中,可以更新某个映射的值,或者添加一个新的映射关系,做法是在 = 号的左侧使用():

    scores("Bob") = 10  //更新键"Bob"对应的值(假定scores是可变的)

  • 也可以用 += 操作添加多个关系

    scores += ("Bob" -> 10, "Fred" -> 7)

4.迭代映射

  • 遍历映射中所有的键/值对偶

    for ((k,v ) -> 映射)  //处理k和v

  这里的“魔法”是你可以在Scala的for循环中使用模式匹配。

5.元组:是不同类型的值的聚集

  • 元组的值是通过将单个的值包含在圆括号中构成的。

    (1, 3.14, "Fred")  //该元组的类型为:Tuple3[Int, Double, java.lang.String]

  • 使用方法_1、_2、_3访问元组的元素,比如:

    val second = t._2  //将second设为3.14

  Tips:和数组或字符串中的位置不同,元组的个元组从1开始,而不是0.

  • 通常,使用匹配模式来获取元组的组元

    val (first, second, third) = t  //将first设为1,second设为3.14,third设为"Fred"

  • 如果不是所有的部件都需要,可以在不需要部件的位置上使用_:

    val (first, second, _) = t

6.拉链操作

  • 使用元组的原因是把多个值绑在一起,以便它们能够被一起处理,通常可以用zip方法来完成。

    val symbols = Array("<", "-", ">")

    val counts = Array(2, 10, 2)

    val pairs = symbols.zip(counts)

  输出对偶的数组:

    Array(("<", 2), ("-", 10), (">", 2))  //然后这些对偶就可以一起处理

   Tips:可以用toMap方法将对偶的集合转换成映射。

    keys.zip(valuse).toMap

    

posted @ 2017-11-05 13:18  xiagte  阅读(177)  评论(0编辑  收藏  举报