packagecom.learn.scala
importscala.collection.mutable.ArrayBuffer
/**
* scala学习第六天
* Created by zhuqing on 2017/2/26.
*/
objectDay6Array {
defmain(args: Array[String]): Unit = {
/**
* 数组的变遍,可以像Java中Foreach 那样逐个遍历,可以按位置遍历
*/
for(a <-this.createArray()) {
print(a +" ")
}
println()
for(a <-this.createArrayBuffer()) {
print(a +" ")
}
println()
valarr =this.createArray()
// 0 until 10 ,是0到9的区间Range , 不包含10
for(i <-0until arr.length) {
print(arr(i) +" ")
}
println()
valarrayBuffer =this.createArrayBuffer()
for(i <-0until arr.length) {
print(arr(i) +" ")
}
println()
//生成带步长的区间
println(0until(arr.length,2))//打印Range(0, 2, 4, 6, 8), 步长为2
for(i <-0until(arr.length,2)) {
print(arr(i) +" ")//打印1 3 5 7 9
}
println()
//区间的翻转 ,reverse是GenSeqLike的方法,实现了它的集合都有这样的功能
//关于Range的Api :http://www.scala-lang.org/api/current/scala/collection/immutable/Range.html
println(0until arr.length reverse)//Range(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
/**
* 数组的转换,可以使用for循环的yield,
*/
//去数组arr的偶数位的数并乘以2
valarrNew =for(i <-0until(arr.length,2))yieldarr(i) *2
//数组 yield后成为Vector
println(arrNew.getClass);//打印class scala.collection.immutable.Vector
//toArray转换为Array,toArray是特质GenTraversableOnce中的方法
//Vector的Api :http://www.scala-lang.org/api/current/scala/collection/immutable/Vector.html
println(arrNew.toArray.mkString(" "));//2 6 10 14 18
/**
* 数组的另一种转换,是使用自带的Map方法
*/
//与上面的功能相似
valarrNew2 = arr.filter((a: Int) => {
a %2!=0
}).map((a: Int) => {
a *2
})
println(arrNew2.mkString(" "));//2 6 10 14 18
//与上面的功能一样,scala中的lambda可以比Java中的更简单一些,如下面"_"表示参数
valarrNew3 = arr.filter(_%2!=0).map(_*2);
println(arrNew3.mkString(" "));//2 6 10 14 18
/**
* 数组还有一些常用的算法,sum,max,min,sort , mkString:拼接成字符串
* 可以参考API:http://www.scala-lang.org/api/current/scala/Array.html
* http://www.scala-lang.org/api/current/scala/collection/mutable/ArrayBuffer.html
*/
println(arr sum)//arr的和
println(arr max)//arr的最大值,maxBy可以自己比较最大值
//前面的遍历数组打印,可以这样实现
println(arr mkString(" "))
}
/**
* 创建一个1到10的ArrayBuffer
*
*@return
*/
defcreateArrayBuffer(): ArrayBuffer[Int] = {
ArrayBuffer[Int](1to10: _*)
}
/**
* 创建1到10的Array
*
*@return
*/
defcreateArray(): Array[Int] = {
Array[Int](1to10: _*)
}
}