scala中的tuple作为元组,和python中的元组非常相似,其中的元素可以是不同类型的,这是元组和数组最大的区别,数组中存的元素类型必须相同,tuple和Array的下标起点略有不同,tuple从1开始,Array从0开始,tuple可以通过._x方法访问tuple中的第x个元素,也可以结合for操作,同时我们的函数一般只有一个返回值,借助tuple我们可以实现多个返回值,把需要的返回值封装成一个tuple返回,返回类型可以借助scala的自带的类型推导省略掉
def f_tuple(num1:Int,num2:Int)={
val res=(num1+num2,num1-num2)
res
}
def main(args: Array[String]): Unit = {
val pair=("aa",123,4+5)
println(pair._3)
//通过迭代方法遍历
for ( i <- pair.productIterator)
println(i)
//函数调用通过tuple返回多个返回值
val res=f_tuple(11,5)
for ( i <- res.productIterator)
println(i)
}
Array的声明不需要new关键字,其实是调用了内部的apply方法(后述),可以通过for或者index来访问
def main(args: Array[String]): Unit = {
val arr=Array(2,3,1,4,5)
for(item <- 0 until arr.length){
//2者都是通过index取值
println(arr(item))
println(arr.apply(item))
}
//迭代取值
for(item <- arr)
println(item)
}
Map作为映射,是随处可见的一种数据结构,使用范围非常广泛,也有很多不同类别的实现子类满足各式各样的操作,下面就以最普通的Map为例,Map作为Key,Value的键值对,可以直接通过方法获取整个Map的键值或者Value值,最常见的是在for循环中利用tuple来对整个Map的键值对进行访问,以及通过get方法取对应key的value值,而通过get取不存在的key值的话会报错,因此更好的做法是用getOrElse方法来表示万一不存在该key的时候是给定哪个默认值
def main(args: Array[String]): Unit = {
val mymap=Map("aa"->99,"bb"->66,"cc"->77)
println(mymap.keys)
println(mymap.values)
println(mymap.get("bb"))
println(mymap.getOrElse("dd", "no this key"))
for((k,v) <- mymap){
println("key is "+k+" value is "+v)
}
}