Scala中数组需要指定数据类型和长度
1.定义:
两种方法:
方法1:
val arr1 = new Array[String](4)
生成一个 String类型长度为 4 的数组
ps: 这种声明方法 是类似Java 的面向对象类型的编程语言,常用写法
方法2:
var arr1 = Array(111,222.333,6666) arr1.foreach(println("arr1: ", _))
ps: 这种声明是 函数式编程的常用写法,这里只需要记住是 有这种写法就可以了, 等学完后面讲解的伴生对象、apply的工厂模式 和 update 方法,就更清晰了
1.1 生成数组,并修改数组元素
eg:
var arr1 = new Array[Int](3)
arr1(0) = 1
arr1(1) =2
arr1.foreach(x => print("first:"+x+"\n"))
println("------------------")
//modify alter
arr1(0)=999
arr1.foreach(x => print("second:"+x+"\n"))
1.2生成一个可变长度的数组:
ArrayBuffer 可以不用指定数组长度
val buffer = ArrayBuffer[T]()
eg:
var arr1 = new ArrayBuffer[Int]()
arr1.append(1)
arr1.append(2)
arr1.foreach(x => println(x))
println("-----------")
println(arr1(0))
追加方法:
+=
++=
append
2.遍历数组
var arrB1 = ArrayBuffer[Int]()
arrB1.append(1)
arrB1.foreach{x => println(x)} //arrB1.foreach(x => println(x)) 小括号或者 花括号都可以
输出:1
3.二维数组
var arr1 = Array.ofDim[Int](2,2)
arr1(0)(0) = 1
arr1(0)(1) = 2
arr1.foreach{x => x.foreach(y => println(y))}
输出:
4.数组合并 concat
import Array._
var arr2 = new Array[Int](1)
arr2(0)=3
var arr3 = new Array[Int](1)
arr3(0) = 4
var arr4 = concat(arr3, arr2)
arr4.foreach(x => println(x))
输出:
5.区间数组
5.1.定义区间数组
使用:range(a, b , c) 参数 a 代表 区间开始位置, b 代表 区间结束位置, c 代表 每次增加步长, 缺省默认为 1
eg:
var arr1 = range(1,10)
arr1.foreach(x => println(x))
输出:
设置步长为 3
eg:
var arr2 = range(1,10,3)
arr2.foreach(x => println(x))
输出:
5.2 在for 循环中使用 区间数组
eg:
for(i <- range(1,10)){
println(i)
}
输出:
6.数组常用函数
使用方法前需要先 import Array._ 引入包
1 | def apply( x: T, xs: T* ): Array[T] 创建指定对象 T 的数组, T 的值可以是 Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean。 |
2 | def concat[T]( xss: Array[T]* ): Array[T] 合并数组 |
3 | def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit 复制一个数组到另一个数组上。相等于 Java's System.arraycopy(src, srcPos, dest, destPos, length)。 |
4 | def empty[T]: Array[T] 返回长度为 0 的数组 |
5 | def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T] 返回指定长度数组,每个数组元素为指定函数的返回值。 以上实例数组初始值为 0,长度为 3,计算函数为a=>a+1: |
6 | def fill[T]( n: Int )(elem: => T): Array[T] 返回数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。 |
7 | def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回二数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。 |
8 | def ofDim[T]( n1: Int ): Array[T] 创建指定长度的数组 |
9 | def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 创建二维数组 |
10 | def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]] 创建三维数组 |
11 | def range( start: Int, end: Int, step: Int ): Array[Int] 创建指定区间内的数组,step 为每个元素间的步长 |
12 | def range( start: Int, end: Int ): Array[Int] 创建指定区间内的数组 |
13 | def tabulate[T]( n: Int )(f: (Int)=> T): Array[T] 返回指定长度数组,每个数组元素为指定函数的返回值,默认从 0 开始。 以上实例返回 3 个元素: |
14 | def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]] 返回指定长度的二维数组,每个数组元素为指定函数的返回值,默认从 0 开始。 |