要点:
1、若长度固定则使用Array,若长度可能有变化则使用ArrayBuffer
2、如果提供了初值则不使用new
3、用()来访问元素
4、用 for(elem <-array)来遍历元素
5、用 for(elem <-array if …) … yield …来产生新数组
6、与java的互操作使用scala.collection.JavaConversions中的转换函数
如果要从数组的尾端开始遍历,写法为:
(0 to 10).reverse
如果你在一些函数的声明处看到 B>: A 这样的写法,它表示B是A 的超类类型
一个有逼格的函数式编程的程序员,一般并不屑于使用 for yield 这样的语法而是使用
filter map这种风格。
想要在一个ArrayBuffer 后面添加一个Array的方式可以使用 ++这样的语法。
package demo
import scala.collection.mutable.ArrayBuffer
import scala.util.Random
/**
* @author Administrator
*/
object ScalaArray {
def main(args: Array[String]): Unit = {
println(createArray(10).mkString("[", ",", "]"))
var ar = Array(1, 2, 3, 4, 5)
for (i <- 0 until ar.length if i % 2 == 0 && i + 1 < ar.length) {
val a = ar(i)
ar(i) = ar(i + 1)
ar(i + 1) = a
}
println(ar.mkString("[", ",", "]"))
ar = Array(1, 2, 3, 4, 5)
val na = for (i <- 0 until ar.length) yield if (i == ar.length - 1) ar(i) else if (i % 2 == 0) ar(i + 1) else ar(i - 1)
println(na.mkString("[", ",", "]"))
val arr2 = Array(1,5,-2,8,0,-6)
arr2.map { x => x>0 }
val tmpArr = for(a <- arr2 if a>0) yield a
val tmpArr2 = for(a <- arr2 if a<=0) yield a
val tm = tmpArr.toBuffer++tmpArr2
println(tm.mkString("[", ",", "]"))
println(arr2.sum / arr2.length)
}
def createArray(n: Int) = {
val array = ArrayBuffer[Int]()
for (i <- 1 to n) array += Random.nextInt(n)
array.toArray
}
}