您的位置:首页 > 其它

Scala学习七:数组

2017-05-18 09:11 211 查看

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] 使用自定义的比较函数进行排序

参考:Scala 数组常用的几种排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala