少年壮志不言愁
劝君惜取少年时
-
定长数组: Scala使用
Array
表示长度不变的数组scala> val nums = new Array[Int](10) // 10个整数数组,初始化为0 nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
初始化时,如果提供了初始值Scala可以类型推断,不需要
new
scala> val s = Array("Hello", "World") s: Array[String] = Array(Hello, World)
Scala使用
()
访问数组scala> s(0) res35: String = Hello
-
变长数组: Scala使用
ArrayBuffer
这种数据结构来表示长度需要变化的数组scala> import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.ArrayBuffer scala> val b = ArrayBuffer[Int]() b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer() scala> b += 2 // 用+=在尾部添加元素 res36: b.type = ArrayBuffer(2) scala> b += (4,5,6) //在尾部添加多个元素,用括号包起来 res37: b.type = ArrayBuffer(2, 4, 5, 6) scala> b ++= Array(7, 8, 9) // ++=追加任何集合 res39: b.type = ArrayBuffer(2, 4, 5, 6, 7, 8, 9) scala> b.trimEnd(3) //移除最后3个元素 scala> b res42: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 4, 5, 6) scala> b.insert(2,3) //下标2之前插入值3 scala> b res44: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 4, 3, 5, 6) scala> b.insert(2, 1,1,1) //插入任意多的元素 scala> b.remove(2) //移除下标2的元素 res49: Int = 1 scala> b res50: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 4, 1, 1, 3, 5, 6) scala> b.remove(2, 4) //移除一些元素,第二个参数表示移除多少个 scala> b res52: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 4, 6)
使用
toArray
、toBuffer
实现数组和数组缓冲之间转换 遍历数组和数组缓冲:使用
for
循环遍历-
数组转换:
for/yield
循环创建一个类型与原数组相同的新数组,不会修改原数组通常遍历一个集合时,筛选特定元素可以通过if守卫,也可以通过函数式编程思想
map/filter
(个人喜欢这种方式实现~) -
常用函数:
sum
、min
、max
、mkString
、sortWith
等
我们可以对一个数组排序,但是不能对一个数组缓冲排序scala> scala.util.Sorting.quickSort(b) <console>:19: error: overloaded method value quickSort with alternatives: [K](a: Array[K])(implicit evidence$1: scala.math.Ordering[K])Unit <and> (a: Array[Float])Unit <and> (a: Array[Int])Unit <and> (a: Array[Double])Unit cannot be applied to (scala.collection.mutable.ArrayBuffer[Int]) scala.util.Sorting.quickSort(b)
-
多维数组: Scala通过数组的数组来实现多维数组,使用
ofDim
方法构造数组scala> val m = Array.ofDim[Double](3,4) // 三行四列
Scala数组使用Java数组实现的,因此可以在Java和Scala之间来回传递