数组
Scala中,有两种数组,一种是定长数数组,另一种是变长数组
定长数组
- ·定长数组指的是数组的长度不允许改变的
- 数据的元素是可以改的
语法:
// 通过制定长度定义数组
var/val 变量名 = new Array[元素类型](数组长度)
// 用元素直接初始化数组
var/val 变量名 = Array(元素1,元素2,元素3....)
参考代码:
scala> var list=new Array[Int](10)
list: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
scala> list(0)=100
scala> println(list(0))
100
变长数组
变长数组制定的数组的长度可以变的,可以往数组中添加、删除元素。
语法:
- 需要提前导入ArrayBuffer类(import scala.collection.mutable.ArrayBuffer)
- 创建空的ArrayBuffer变长数组,语法结构是:
var/val 变量名=ArrayBuffer[元素类型]()
- 创建带初始化元素的ArrayBuffer
- var/val 元素名 = ArrayBuffer(元素1,元素2,元素3...)
示例一:
定义一个长度为0的整形变长的数组
参考代码
var a=ArrayBuffer[Int](0)
import scala.collection.mutable.ArrayBuffer
scala>
scala> a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(0)
示例二:
定义一个包含"hadoop","storm","spark","scala"元素的变长数组
参考代码
scala> var a=ArrayBuffer("hadoop","storm","spark","scala")
a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark, scala)
添加/修改/删除元素
- 使用+=添加元素
- 使用-=删除元素
- 使用++=追加一个数组到变长数组
- 使用索引修改元素
参考代码
// 创建一个可变的数组
scala> var a=ArrayBuffer("hadoop","storm","spark","scala")
a: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark, scala)
// 添加一个元素
scala> a+="java"
res3: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark, scala, java)
// 删除一个元素
scala> a-="java"
res4: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark, scala)
// 添加一个数组
scala> a++=Array("hive","java","hue")
res5: scala.collection.mutable.ArrayBuffer[String] = ArrayBuffer(hadoop, storm, spark, scala, hive, java, hue)
// 修改元素
scala> a(0)="hello"
println(a)
scala> ArrayBuffer(hello, storm, spark, scala, java, hive, java, hue)
循环遍历
- 使用for 表达式直接遍历数组中的元素
- 使用索引遍历数组中的元素
参考代码
// 方式一
scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
scala> for(i <- a){
println(i)
}
//方式二
scala> for (i <- 0 to a.length-1) {
println(i)
}
练习题
//定义一个数组arr1内容为1-10
var arr1=Array(1,2,3,4,5,6,7,8,9,10)
//使用filter过滤器,过滤出来偶数
arr1.filter(_%2==0)
//使用map把arr1数组中每一个元素都取出来放到一个全新数组
var arr2= arr1.map(x => x)
//使用foreach打印出arr1数组中的元素
arr1.foreach(println(_))
//翻转数组arr1
arr1.reverse
//修改数组arr1中下标为0的数据为100
arr1(0)=100
//删除arr1数组下标为0的数据
arr1.drop(1).foreach(println(_))
//arr1数组从下标2开始,删除3个元素
arr1.take(2) ++ arr1.drop(5)
//插入数据到arr1数组, 第一个参数是开始的位置,插入50,66,77
arr1 = (ArrayBuffer(55, 66, 77) ++= arr1).toArray
//对arr1数组进行降序排列
val sorted = arr1.sorted.reverse
sorted.foreach(println(_))
//创建ArrayBuffer
var arr3 = ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
//使用trimEnd()函数,可以从尾部截取指定的元素
arr3.trimEnd(2)
//使用insert 参数一 插入数据的索引,第二个参数插入的数据可有多个
arr3.insert(0,22)
// 删除角标是1到3的元素
arr3.remove(1,3)