元组,集合,映射

元组
  1. 元组是不可变的。
  2. 元祖可以包换不同类型的元素
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

mapset 一样,分可变不可变类型

默认是不可变 的。

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)  //同上,不过更加简化
}
原文地址:https://www.cnblogs.com/jijizhazha/p/7135980.html