大資料系列-Scala學習3
阿新 • • 發佈:2019-02-08
問題:
1、陣列的定義
2、陣列緩衝
3、資料的遍歷
4、資料的轉換
5、函式
6、例項
1、陣列的定義
定義一個長度不變的陣列, val nums=new ArrayInt//10個數據的陣列,所有元素初始化0
val s=Array(“Hello”,”Scala”) //長度為2的Array[String] 型別是可以推斷出來的,
s(0)=”Google” 使用()而不是跑[]來訪問元素
注意:如果提供了初始值就不需要new了
2、陣列緩衝
1、對於那種長度需要變化的陣列,java有ArrayList,C++有vector,scala中有ArrayBuffer
需要匯入包 import scala.collection.mutable.ArrayBuffer
val b=ArrayBuffer[Int]()//或者 new ArrayBuffer[Int] 一個空陣列緩衝,準備存放整數
b+=1 //ArrayBuffer(1) 用+=在尾端新增元素
b+=(1,2,3,5)//ArrayBuffer(1,1,2,3,5) 如果是在尾端增加多個元素可以用括號括起來
b++=Array(8,13,21) //ArrayBuffer(1,1,2,3,5,13,21) 你可以用++=操作符追加任何集合
b.trimEnd(5)//ArrayBuffer(1,1,2) 移除最後5個元素
b.insert(2,6) //ArrayBuffer(1,1,6,2) 在下標2之前插入
b.insert(2,7,8,9)//ArrayBuffer(1,1,7,8,9,6,2) 你可以插入任意多的元素
b.remove(2) //ArrayBuffer(1,1,8,9,6,2)
b.remove(2,3)//ArrayBuffer(1,1,2) 第2個引數的含義是要移除多少個元素
3、陣列遍歷
for(i<- 0 until b.length)
//變數i的取值從0 到b.length-1,until是RichInt類的方法,返回所有小於(但不包括)上線的數值
println(0 until 10) Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )
4、陣列轉換
從一個數組或者陣列緩衝出發,以某種方式對它進行轉換是很簡單的,這些轉換動作不會修改原始陣列,而是產生一個全新的陣列
for(…) yield 迴圈建立了一個型別與原始集合相同的新集合。
//將陣列b的所有值乘以2賦值給result
val result=for(elem<-b) yield elem*2
println(result)//ArrayBuffer(2, 2, 4, 6, 10, 16, 26, 42)
//將陣列b的能與2整除的值乘以2賦值給result1
val result1=for(elem<-b if elem%2==0) yield elem*2
println(result1)//ArrayBuffer(4, 16)
//將陣列b的能與3整除的值乘以2在打印出來
println(b.filter(_ %3==0).map(_*2))//ArrayBuffer(6, 42)
5、 函式
println("sum:="+b.sum) 求和
println("max:="+b.max) 求最大值
println(b.sorted) 排序 升序
println(b.mkString("|")) 分隔符 1|1|2|7|5|8|13|21
println(b.mkString("<","|",">")) <1|1|2|7|5|8|13|21>
6、案例
package cn.xlucas.day3
import scala.collection.mutable.ArrayBuffer;
class ArrayDemo1 {
}
object ArrayDemo1{
def main(args:Array[String]){
val b=ArrayBuffer[Int]();
b+=1
b+=(1,2,7,5)
b++=Array(8,13,21)
for(i<- 0 until b.length)
println(i+": "+b(i))
for(elem<-b)
println(elem)
val result=for(elem<-b) yield elem*2
println(result)//ArrayBuffer(2, 2, 4, 14, 10, 16, 26, 42)
val result1=for(elem<-b if elem%2==0) yield elem*2
println(result1)//ArrayBuffer(4, 16)
println(0 until 10)//Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
println(b.filter(_ %3==0).map(_*2))//ArrayBuffer(42)//ArrayBuffer(42)
println("sum:="+b.sum)//sum:=58
println("max:="+b.max)//max:=21
println(b.sorted)//ArrayBuffer(1, 1, 2, 5, 7, 8, 13, 21)
println(b.mkString("|"))//1|1|2|7|5|8|13|21
println(b.mkString("<","|",">"))//<1|1|2|7|5|8|13|21>
}
}