Scala映射和元组

来源:互联网 发布:nginx 1.8.0 域名和ip 编辑:程序博客网 时间:2024/05/18 18:46

        映射是键/值对偶的集合。Scala有一个通用的叫法——元组——n个对象的聚集,并不一定要想同类型的。对偶不过是一个n=2的元组。元组对于那种需要将两个或更多值聚集在一起时特别有用。

     1、构造映射

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

     上述代码构造出一个不可变的Map(String,Int),其值不能被改变。如果想要一个可变映射,则用

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

     如果想从一个空的映射开始,你需要选定一个映射实现并给出类型参数:

   val scores = new scala.collection.mutable.HashMap[String,Int]

    在Scala中,映射是对偶的集合。简单的说,对偶就是两个值构成的组,这两个值不一定是同一个类型的,比如("Alice",10)。

    ->操作符用来创建对偶:"Alice" -> 10   ==>  ("Alice",10)

    也可以用另一种方式来定义映射:
    val scores= Map(("Alice",10),("Bob",3),("Cindy",8))

    2、获取映射中的值

     在Scala中,使用()表示法来查找某键对应的值:

     val bobsScore= scores("Bob")

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

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

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

或者:

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

  映射.get(键)返回一个Option对象,要么是Some,要么是None。

    3、更新映射中的值

     在可变映射中,更新或者添加一个新的映射关系:

   scores("Bob") =10 //更新(scores是可变的)
   scores("Fred") =7 //新加(scores是可变的)

或者:

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

   移除某个键和对应的值:

   scores -= "Alice"

   4、迭代映射

     使用for循环遍历映射中所有的键/值对偶:

     for((k,v) <-映射) 处理kv

    如果你只需要访问键或值,则可以像Java一样使用keySet和values方法。values方法返回一个Iterable

   scores.keySet   for(v <- scores.values) println(v)

    要反转一个映射,即交换键和值的位置可用:

   for((k,v) <- 映射) yield (v,k)

   5、元组

   对偶是元组最简单的形态——元组是不同类型的值得聚集


   (1,3.14,"Fred")是一个元组,类型为:

  Tuple3[Int,Double,java.lang.String]

   访问其组元的方法为_1、_2、_3

  val t=(1,3.14,"Fred")  val second=t._2  //second=3.14

   注意的是元组的下标从1开始。

   6、拉链操作

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

  val symbols=Array("<","-",">")  val counts=Array(2,10,2)  val pairs=symbols.zip(counts)


  输出对偶的数组:

  Array(("<",2),("-",10),(">",2))

   然后一起被处理:

  for((s,n) <-pairs) Console.print(s*n)//会打印<<---------->>



0 0
原创粉丝点击