天天看点

ScalaNote15-集合之数组Array

Intro

scala集合基本介绍:

  • Scala同时支持不可变集合和可变集合,不可变集合可以安全的并发访问
  • 两个主要的包:
  • 不可变集合:scala.collection.immutable
  • 可变集合: scala.collection.mutable
  • Scala默认采用不可变集合,对于几乎所有的集合类,Scala都同时提供了可变(mutable)和不可变(immutable)的版本
  • Scala的集合有三大类:序列Seq、集Set、映射Map,所有的集合都扩展自Iterable特质,在Scala中集合有可变(mutable)和不可变(immutable)两种类型

定长数组

定长数组元素个数固定,元素值可修改。看个Demo:

val arr01 = new Array[Int](4)
println("arr01.length = " + arr01.length)
println("arr01(0)=" + arr01(0))
arr01.foreach((i=>print(i)))
arr01(3) = 10
println("------")
println(arr01.mkString(","))      
arr01.length = 4
arr01(0)=0
0000------
0,0,0,10





arr01: Array[Int] = Array(0, 0, 0, 10)      
  • 创建:[Int] 表。(4) 表示数组长度
  • 查:可以用(index)的方式访问对应下标的元素
  • 改:也可以指定下标修改元素值
  • 删增:定长数组不支持

也可以直接直接初始化数组:

val arr02 =Array(1,3,"cy")      

两个小点:

  • 之前new Array是构建类Array的实例对象,通过new关键字识别
  • 而这里直接初始化数组,用的是伴生对象中的apply方法
  • 如果数组元素类型不一致,则为"Any"类型

变长数组

顾名思义,变长数组就是数组可以改变,数组可以增减元素。看个Demo:

import scala.collection.mutable.ArrayBuffer
// 创建
val arr02 = ArrayBuffer[Any](1,2,3,4,5,6,7)
// 查询元素  
println("arr02(0) = "+ arr02(0))
// 增加元素
arr02.append(8,9,10)
println(arr02.mkString(","))
// 删除元素,根据索引位置来
// 删除第1个元素
arr02.remove(0)
println(arr02.mkString(","))
//从第1个元素开始,删除两个元素
arr02.remove(0,2)
println(arr02.mkString(","))      
arr02(0) = 1
1,2,3,4,5,6,7,8,9,10
2,3,4,5,6,7,8,9,10
4,5,6,7,8,9,10





import scala.collection.mutable.ArrayBuffer
arr02: scala.collection.mutable.ArrayBuffer[Any] = ArrayBuffer(4, 5, 6, 7, 8, 9, 10)      

ArrayBuffer有点像Python里的List,可以通过append的方式添加元素

定长数组和变长数组的转换

  • arr1.toBuffer //定长数组转可变数组
  • arr2.toArray //可变数组转定长数组

    说明:

  • arr2.toArray 返回结果才是一个定长数组, arr2本身没有变化,可重新赋值给另一个变量
  • arr1.toBuffer返回结果才是一个可变数组, arr1本身没有变化

多维数组

多维数组也经常使用,比如python中numpy的array或者R中的matrix,Scala里这样定义:

//说明:二维数组中有三个一维数组,每个一维数组中有四个元素
val arr = Array.ofDim[Double](3,4)      
val array1 = Array.ofDim[Int](3, 4)
array1(1)(1) = 9
for (item <- array1) {
for (item2 <- item) {print(item2 + "\t")}
println()
}      
0 0 0 0 
0 9 0 0 
0 0 0 0 





array1: Array[Array[Int]] = Array(Array(0, 0, 0, 0), Array(0, 9, 0, 0), Array(0, 0, 0, 0))