Scala学习七:数组
Scala中有 变长数组 和 定长数组。Scala的数组以Java数组实现。
Scala 数组大小 及 访问数组元素 用"小括号 ()" 修饰。
Java 数组大小 及 访问数组元素 用 "中括号 []" 修饰。
Scala 不指定数组大小,用元素直接初始化数组 用 "小括号()" 修饰。
Java 不指定数组大小,用元素直接初始化数组 用 "大括号{}" 修饰
Scala代码:
// 定长数组:scala.ArrayArray
val arr = new Array[Int](10)
arr(0) = 1
val arr2 = Array(1,2,3)
println(arr2(2))
// 变长数组:
scala.collection.mutable.ArrayBuffer
val arrBuf = new ArrayBuffer[String](10)
// 变长数组可以不指定数组大小
val arrBuf2 = new ArrayBuffer[String]
val arrBuf3 = ArrayBuffer("a","b","c")
Java代码:
int[] arr = new int[10];
arr[0] = 0;
String[] arrStr = new String[10];
String[] arrStr2 = new String[]{"a","b","c"};
System.out.println(arrStr2[2])
在数组尾部插入元素 或 集合操作是高效的。
但是在数据中间插入 元素 或 集合 操作是低效的,因为所有元素都必须被向后平移。
Scala中数组迭代有3种方式:
println("------- ArrayBuffer [foreach] ")
arrBuf2.foreach(e=>{
println(" element = " + e)
})
println("------- ArrayBuffer [for until] ")
// for(a <- 0.until(3)){
// 0 until 3 '等于==' 0.until(3)
for(a <- 0 until 3){
println(arrBuf2(a))
}
println("------- ArrayBuffer [for element] ")
// 不用下标,直接访问数组元素
for(a <- arrBuf2){
println(a)
}
对数组的很大比例的基本都是在排序,求和,Scala支持对数据进行方便快捷的操作。
println("------- Array [init] ")
val arr = new Array[Int](10)
val arr2 = Array(2, 1, 3)
println("------- Array [sum] ")
println(" sum = " + arr2.sum)
println(" max = " + arr2.max)
println(" min = " + arr2.min)
// 排序并不修改原始版本,而是产生一个新集合
println(" sort = " + arr2.sorted.mkString(","))
Scala中可以排序的数据必须支持比较操作,包括数字,字符串,或其他带有Ordered物质的数据。
Scala常用的几种排序:
sortBy: sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A] 按照应用函数f之后产生的元素进行排序
sorted: sorted[B >: A](implicit ord: math.Ordering[B]): List[A] 按照元素自身进行排序
sortWith: sortWith(lt: (A, A) ⇒ Boolean): List[A] 使用自定义的比较函数进行排序