从零学scala(二)数组相关操作、映射和元组
一:数组相关操作
定长数组
val array = Array[String]("a","b","c") //直接初始化数组的内容
println(array.mkString("|"))
val array = new Array[String](2) //new一个长度为2的数据在通过更新的方法进行赋值
array.update(0, "0")
array.update(1, "1")
println(array.mkString("|"))
变长数组:数组缓冲
import scala.collection.mutable.ArrayBuffer
val data = new ArrayBuffer[String]();
data.-=("3") //单个元素删除操作
data.-=("3","2") //单个元素删除操作
data.+=("1") //单个元素添加操作
data.+=("2","3","4") //多个元素添加操作
data.++=(Array("5","6","7")) //可变数组操作不变数组
data.++=(data) //可变数组操作可变数组
data.trimEnd(2) //移除最后五个元素
data.remove(2) //第二位数组移除第二位元素
data.remove(2,3) //第二位开始移除三个元素
val array = data.toArray[String] //转换成数组
遍历数组和数组缓冲
val array = Array[String]("a","b","c","d") //转换成数组
for(i <- array) //遍历每个元素
println(i)
for(i <- 0 until array.length) //遍历数组长度
println(array.apply(i))
for(i <- 0 until (array.length,2)) //每两个元素跳一下
println(array.apply(i))
val array = Array[String]("a","b","c","d","e","f","h")
for(i <- (0 until array.length).reverse ) //反转,但是IDE提示的时候提示不到这个方法
println(array.apply(i))
数组转换
val array = Array[String]("a","b","c","d","e","f","h")
val arrayB = for(i <- (0 until array.length).reverse ) yield array.apply(i) +“a” // 数组对象yield之后产生数组对象,数组buffer对象yield之后产生数组buffer对象
val array = Array[String]("a","b","c","d","e","f","h")
val arrayB = array.map { x => x+"a" }.filter { x => x.equals("aa") } //链式编程方法
常用方法
val array = Array[Int](1,2,3,4).sum //求和
val array1 = Array[Int](1,2,3,4).max //最大值
val array2 = Array[Int](1,2,3,4)
array2.sortWith((a,b)=>a > b).mkString("|") //排序
scaladoc
val array2 = ArrayBuffer[Int](2,2,3,4)
array2.append(6) //添加新元素
array2.appendAll(array2) //添加新数组
array2.count( x => {if (x == 6) true else false}) //计算满足个数的值
array2.+=(7) //添加新元素
val max = array2.max //数组最大值
println(array2.mkString("|"))
val arrayBuffer = array2.padTo(15, 1234) //将数组转换为固定长度的数组,不够的话用第二个参数填充
println(arrayBuffer.mkString("|"))
多维数组
val array = Array.ofDim[String](2, 4) //两行四列
array(1)(3) = "1234";
println(array.mkString("|"))
与Java互操作
import scala.collection.JavaConversions._ //想要把scala转换为java的方法使用这个
//里面包含了大量将scala集合转换为java的类
二:映射和元组
构造映射
val map = Map("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
val map1 = scala.collection.mutable.Map[String,Int]() //此方法生成一个变长的map集合
map1.+=(("dd",7))
println(map1.mkString("|"))
获取映射中的值
val map = Map("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
println(map.getOrElse("dd", "100")) //去拿dd的值,如果没有的话就返回100
更新映射中的值
val map1 = scala.collection.mutable.HashMap("aa"->4,"bb"->5,"cc"->6) //此方法生成一个定长的map集合
map1.+=(("dd"->7)) //不可变map这个方法是返回新的map
println(map1.mkString("|"))
map1.-=("bb") //删除key
println(map1.mkString("|"))
map1.update("aa", 100) //不可变map没有这个方法
println(map1.mkString("|"))
迭代映射
val map1 = scala.collection.mutable.HashMap("aa"->4,"bb"->5,"cc"->6)
for((key,value)<-map1){
println(key +"|" + value)
}
println()
for(key<-map1.keySet){
println(map1.apply(key))
}
println()
for((key,value)<-map1) yield(value,key) //反转map结构,key,value相互转换
已排序映射
//生成不可变的的排序的map,如果必须要可变的话,建议用treemap
val map1 = scala.collection.immutable.SortedMap("mm"->4,"aa"->5,"cc"->6)
for((key,value)<-map1){
println(key +"|" + value)
}
println()
//生成可变的有顺序的map
val map2 = scala.collection.mutable.LinkedHashMap("mm"->4,"aa"->5,"cc"->6)
for((key,value)<-map2){
println(key +"|" + value)
}
与Java互操作
//将一而终类型的变量转换为另一种类型的变量,这就是JavaConversions魅力
//下面的例子就是将Properties转换为Map类型
import scala.collection.JavaConversions.propertiesAsScalaMap
val map:scala.collection.Map[String,String] = System.getProperties
println(map.toString())
//可用的还有
import scala.collection.JavaConversions.mapAsScalaMap
import scala.collection.JavaConversions.mapAsScalaConcurrentMap
元组
//元组每个元素都可以是不同的类型
val tt = ("aa",11,2.0f,5l)
println(tt._1) //可以用_1,_2,_3,_4访问
拉链
val aa = Array(1,2,3,4)
val bb = Array(5,6,7,8)
val cc = aa.zip(bb)//拉链操作
println(cc.mkString("|"))