欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala基础(5)- 数组

程序员文章站 2023-12-30 21:15:34
...

数组是最基本的数据结构。通常的语法或数据结构书都会先介绍数组,而后再介绍集合,链表,树,哈希表等等。我们也不例外。

定长数组

最简单的数组创建如下,记住方括号在Scala中用做泛型,相当于<>在Java中作用。

val nums = new Array[Int](10)
// 10个Integer的数组,初始值为零。

更简洁的数组创建像这样:

val s = Array("Hello", "World")

省略new的初始化,并且利用类型推断,无需指明类型。

数组元素的访问使用()。

s(0) = "Goodbye"

s不是val吗?为什么可以改变呢?s这里存的是一个数组的reference,reference不能变,但是其内容是可以改变的。另外说一句,遗憾的是,从C时代开始,Index从0开始这一违反人类正常思维的“习惯”一直沿用。

变长数组

Scala中的ArrayBuffer和Java中的ArrayList类似,长度可以改变。

import scala.collection.mutable.ArrayBuffer //注意到,ArrayBuffer在mutable的包中
val b = ArrayBuffer[Int]()
b += 1 //加元素
b += (1, 2, 3, 5) //加数组

数组遍历

可以使用Index

for (i <- 0 until a.length)
println(i + ": " + a(i))

也可以不用

for (elem <- a) println(elem)

要强调的是,对一个数组(或者其他集合)进行遍历以一种命令式的编程(imperative programming)。在Scala中,我们往往避免使用,而是使用函数式的方法。强调“做什么”而不是怎么做。以后还会遇到很多例子,你会逐步感受到它们的区别。

通用算法

Scala提供了很多内建通用算法,作用于数组,以及以后会谈到的其他数据类型如集合。比如sum,count,max,mKString等等。mKString是一个很使用的方法。参见下面的例子。

Array(1, 2, 3).sum // 6
ArrayBuffer(1, 2, 3).max // 3
val a = Array(1, 10, 2, 9) 
scala.util.Sorting.quickSort(a)  // 现在a变成了 Array(1, 2, 9, 10)
a.mkString(" and ")
// "1 and 2 and 9 and 10"
相关标签: scala

上一篇:

下一篇: