scala基础篇-数组和映射

定长数组

val n = new Array[Int](10) //初始化
val s = new Array[String](10) //初始化
val a = Array("hello", "world") //Array[String]
val b = Array(1,2) //Array[Int]
val c = Array(1,2,"a","b") //Array[Any]

变长数组

import scala.collection.mutable.ArrayBuffer
val b = new ArrayBuffer[Int]()
b += 1
b += (2,3)
b ++= Array(4,5)

经常我们需要一个数组Array,但是初期不知道装多少元素,这种情况下,可以先构造ArrayBuffer,然后调用toArray方法。

遍历数组或数组缓冲

for(i <- 0 until b.length)
    println(i)
for(i <- 0 until 5) #不含5
    println(i)
for(i<- 0 to 4)#包含4
    println(i)

以上三个循环达到的效果是一样的。

映射

一个经典的程序员名言,“如果只能有一种数据结构,那就用哈希表吧。”
Scala的哈希表,即映射。

val scores0 = new scala.collection.mutable.HashMap[String, Int] //初始化空的映射
val scores1 = Map("Alice" -> 10, "Bob" -> 20, "Cindy" -> 30) //不可变的映射集合
val scores2 = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 20) //可变的映射集合

scala>scores1 += ("John" -> 40)
scala>error: value += is not a member of scala.collection.immutable.Map[String,Int]
scala>scores2 += ("John" -> 40)

注意:Map是不可变集合对象,scores1是不可变的变量,作用是不一样的。

scores1("Bob") 
socres1.getOrElse("Bob", 0)
scores1.contains("Bob")
for((k,v) <- scores1) {
  println("k:"+k)
  println("v:"+v)
}
for(v <- socres1) println(v)
for(v <- socres1.values) println(v)

元组

元组不同于映射(Map),它是在不使用类的前提下,将多个元素组合成一组(一个逻辑集合)。

val t= (1, "a")

元组可以很好地与模式匹配相结合(?待体会)

你可能感兴趣的:(scala)