关于scala:Scala-数组

43次阅读

共计 2903 个字符,预计需要花费 8 分钟才能阅读完成。

数组分为可变数组 ArrayBuffer 和不可变数组 Array。

Array

Array 是不可变数组,这里的不可变是指对象的援用不能变,他的长度是固定的不能变的,然而他的元素却是能够更改的。
定义一个不可变数组:

// 长度为 3 的数字,默认都是 0,[] 里是类型,() 里是长度
val arr1: Array[Int] = new Array[Int](3)
// 间接定义数组的元素,这里就是间接调用 apply 办法了
val arr2: Array[Int] = Array(1, 2, 3)

读取、批改:

println(arr1(0)) // 0
println(arr2(0)) // 1
arr1(0) = 1
arr2.update(0, 11)
println(arr1(0)) // 1
println(arr2(0)) // 11

转为字符串,并用 - 连贯:

println(arr2.mkString("-")) // 1-2-3

求最大值、最小值、求和:

println(arr2.sum) // 16
println(arr2.max) // 11
println(arr2.min) // 2

往前面或前面新增元素,因为是不可变数组,所以返回的是新的数组。

  • .+:():办法,加号在后面,所以往前面加元素
  • .:+():办法,加号在前面,所以往后面加元素
  • +::符号,加号在后面,所以往前面加元素
  • :+:符号,加号在前面,所以往后面加元素
val arr3 = arr2.+:(10).:+(4)
println(arr3.mkString("-")) // 10-11-2-3-4

val arr4 = 8 +: 9 +: arr3 :+ 5 :+ 6
println(arr4.mkString("-")) // 8-9-10-11-2-3-4-5-6

遍历数组:
until、to、indices 是取索引,而后通过索引取值。until 和 to 的区别是 to 是等于数组的长度 until 是小于。
前面几个都是间接取数组的元素。

for (i <- 0 until arr2.length) print(arr2(i) + "-") // 11-2-3-
println()
for (i <- 0 to arr2.length - 1) print(arr2(i) + "-") // 11-2-3-
println()
for (i <- arr2.indices) print(arr2(i) + "-") // 11-2-3-
println()
for (i <- arr2) print(i + "-") // 11-2-3-
println()
arr2.foreach((e: Int) => print(e + "-")) // 11-2-3-
println()
arr2.foreach(println) // 11 2 3

ArrayBuffer

ArrayBuffer 是可变数组,所以能够对他进行新增、删除等操作。

// 长度为 3 的数字,默认空,[] 里是类型,() 里是长度
var arr1: ArrayBuffer[Int] = new ArrayBuffer()
var arr2: ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)
println(arr1) // ArrayBuffer()
println(arr2) // ArrayBuffer(1, 2, 3)

读取、批改,这个和不可变数组不一样的是,因为没有初始值,所以不能读取曾经赋值。

// println(arr1(0)) // error
// arr1(0) = 1 // error

println(arr2(0)) // 1
arr2(0) = 11
println(arr2(0)) // 11
arr2.update(0, 1)
println(arr2(0)) // 

转为字符串,并用 - 连贯,求最大值、最小值、求和遍历数组,这些同不可变数组,这里不做演示。
向前或向后新增元素,包含办法和符号两种:

arr2.append(4)
println(arr2.mkString("-")) // 1-2-3-4
arr2.appendAll(ArrayBuffer(5, 6))
println(arr2.mkString("-")) // 1-2-3-4-5-6
arr2.prepend(99)
println(arr2.mkString("-")) // 99-1-2-3-4-5-6
arr2.prependAll(ArrayBuffer(97, 98))
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6

arr2 += 7
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-7
arr2 += (8, 9)
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9
arr2 ++= ArrayBuffer(10, 11)
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11


arr2 :+= 12
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11
arr2 +:= 96
println(arr2.mkString("-")) // 96-97-98-99-1-2-3-4-5-6-7-8-9-10-11

指定地位新增元素:

arr2.insert(4, 100)
println(arr2.mkString("-")) // 96-97-98-99-100-1-2-3-4-5-6-7-8-9-10-11-12
arr2.insertAll(5, ArrayBuffer(101, 102))
println(arr2.mkString("-")) // 96-97-98-99-100-101-102-1-2-3-4-5-6-7-8-9-10-11-12

删除元素,能够指定地位、指定地位 + 删除长度、指定元素删除:

arr2.remove(4)
println(arr2.mkString("-")) // 96-97-98-99-101-102-1-2-3-4-5-6-7-8-9-10-11-12
arr2.remove(4, 2)
println(arr2.mkString("-")) // 96-97-98-99-1-2-3-4-5-6-7-8-9-10-11-12
arr2 -= 96
println(arr2.mkString("-")) // 97-98-99-1-2-3-4-5-6-7-8-9-10-11-12
arr2 -= (97, 98, 99)
println(arr2.mkString("-")) // 1-2-3-4-5-6-7-8-9-10-11-12

转换

不可变数组和可变数组间接是能够转换的。比方上面的例子中,arr3 是 Array 类型的,通过 toBuffer 办法转换为 Buffer 的 arr4,arr4 通过 toArray 办法转为 Array 的 arr5

val arr3 = new Array[Int](4)
val arr4: mutable.Buffer[Int] = arr3.toBuffer
val arr5: Array[Int] = arr4.toArray

正文完
 0