元组
- 元组是不可变的。
- 元祖可以包换不同类型的元素
val a = ('1',1) // 创建元组
println(a._1) //读取元组内元素
读取元组 内元素以 ._1
的形式读取。元祖的索引是基于 1
的。
元组的实际类型取决于 它含有的元素的数量,和元素的类型。
如Tuple2[Char,Int]
即上面的a 元组的类型。
val b = ('a',1,"abc")
//Tuple3[Char,Int,String] 类型。
如果Array和List放入多种类型的元素,那么会是Any类型。
val c = Array('a',"acb",111) //Array[Any] = Array(a,acb,111)
val d = List('a',"abc",111) //List[Any] = List(a,abc,111)
集合 Set
结合具有可变和不可变两种类型。
默认是不可变 的。
var f = Set("ab","cdf")
f += "ghig" // 因为模式是不可变的,所以该操作其实是创建了一个新的Set 并重新赋值给f,所以,需要f 为var的
println(f)
使用可变集合
import scala.collection.mutable.Set
val movSet = Set("a","bc")
movSet += "def" //因为是可变的,所以,movSet确实是在其自身添加了一个新元素,所以,movSet 可以使用val
println(movSet)
以上使用的是Set
特质(trait,类似于java的接口),如果需要指定特定的类来实例化对象
import scala.collection.immutable.HashSet
val hashSet = HashSet("fff","fdafd")
Map
map
和set
一样,分可变 和不可变类型
默认是不可变 的。
import scala.collection.mutable.Map
val ef = Map[Int,String]()
ef += (1 -> "Hello")
ef += (2 -> "world")
val b = Map(1 -> '1',2 -> '2',3 -> '3')
简分两种编程风格
def printArgs(args: Array[String]) = {
var i = 0 //引入了一个变量 i,每次循环都会更改i 的值,所以这是一个指令式编程
while (i < args.length){
println(args(i))
i += 1
}
}
def printArgs(args: Array[String]) = {
for(arg <- args){ // <- 会生成一个 生成器,每次循环生成一个新的不可变元素,所以这是函数式风格编程。
println(arg)
}
}
def printArgs(args: Array[String]) = {
args.foreach(pringln) //同上,不过更加简化
}