`
tongqingqiu
  • 浏览: 24798 次
  • 性别: Icon_minigender_1
  • 来自: 亚特兰大
社区版块
存档分类
最新评论

Scala基础(5)- 数组

阅读更多

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

定长数组

最简单的数组创建如下,记住方括号在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"
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics