ScalaScala

《快学Scala》——数组、映射和元组

2017-05-11  本文已影响44人  不做作就会屎星人

数组

val nums = new Array[Int](10)  //10个整数的数组,所有元素初始化为0
val a = new Array[String](10)  //10个元素的字符串数组,所有元素初始化为null
val s = Array("Hello", "Scala")  //长度为2的字符串数组
s(0) = "Hi"  //使用()来访问数组中的元素,使得s变成Array("Hi","Scala")

注:已提供初始值就不需要使用new
在JVM中,Scala的Array以Java数组方式实现,如字符串数组对应java.lang.String[]IntDouble等基本数据类型对应Java中都是基本数据类型数组,如Array(2,3,4)在JVM中就是一个int[]
for (i <- 0 until a.length)
    println(i + ": " + a(i))

until:返回所有小于上限的数字。
也可以使用如下方法:

for (elem <- a)
    println(elem)

在Scala API文档中还有许多关于数组的函数,比如summaxmin等。这里介绍一个mkStringtoString
当需要显示数组或者数组缓冲就可以使用mkString方法,这个方法还可以指定元素之间的分割符。如下:

而对于toString方法,Array只会生成没意义的地址码。ArrayBuffer会被完全转化成String。如下:

映射

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

构造可变映射

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

构建一个空映射

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

在Scala中映射是 对偶 的集合,就是用两个值构成一个组。

val bobscore = scores("Bob")

若映射中不包含这个键,将会抛出异常。Scala中可以使用 contains方法判断映射中是否包含某个键。为了防止抛出异常也可以这么做:

val bobscore = scores.getOrElse("Bob", 0)  //如果没有Bob这个键就返回0
scores("Bob") = 10  //更新Bob的值
scores("xiaoming") = 5  //添加新的键值对

也可以使用+=来增加多个键值对(如果有相同的键则更新对应的值),用-=来移除某个键值对。如下:


对于不可变映射,可以使用如下方法对映射进行更新和删除,更新后会生成一个新映射
val newScores = scores + ("Bob" -> 10, "Freb" -> 7)  //更新
val newScores = scores - ("Bob" -> 10)   //删除
for((k, v) <- 映射)  处理k和v

如果只需要访问键或值,则可以用keySetvalues方法。values方法返回一个Iterable,这样就可以在for循环中使用这个'Iterable'。如下:

scores.keySet  //生成一个类似Set("Bob","Cindy","Fred")这样的集合
for(v <- scores.values) println(v)  //将打印value值

元组

映射是键值对偶的集合,对偶是元组(tuple)的最简单的形态。元组是不同类型的值的聚集。元组的值是通过将单个的值包括在圆括号中构成。元组的初始化、读取元素和模式匹配的操作如下:


注:其中t._2用来读取元组中的第二个元素。(f,s,_)中的_表示这个位置的元素不需要。
上一篇 下一篇

猜你喜欢

热点阅读