Scala教程(四)数组进阶实战
1 数组Array
1.1 定义数组
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
// 声明Int类型、String类型数组
val number = new Array[Int](10); //> number : Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
val stringArray = new Array[String](10); //> stringArray : Array[String] = Array(null, null, null, null, null,
//| null,null, null, null, null)
1.2 声明并赋值
// 声明并赋值
val strArray = Array("Hello","world") //> strArray : Array[String] = Array(Hello, world)
strArray(0) = "One"
strArray //> res0: Array[String] = Array(One, world)
1.3 遍历数组
// for循环便利元素
for(i <-0 until(stringArray.length)){
println(i+":"+stringArray(i)) //> 0:null
//| 1:null
//| 2:null
//| 3:null
//| 4:null
//| 5:null
//| 6:null
//| 7:null
//| 8:null
//| 9:null
}
2 动态数组ArrayBuffer
2.1 定义动态数组
// 动态数组
var buffer = new ArrayBuffer[Int]() //> buffer : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
2.2 末端追加元素
// 用+=在尾端添加元素
buffer +=1 //> res1: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)
2.3 末端追加多个元素
// 在尾端添加多个元素
buffer +=(1,2,3,5) //> res2: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,
//> 2, 3, 5)
2.4 末端追加集合
// 可以用 ++=操作符追加任何集合
buffer ++=Array(8,13,21) //> res3: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2,
//| 3, 5,8, 13, 21)
2.5 添加元素
// 在第2个元素后添加元素6
buffer.insert(2, 6)
buffer //> res5: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,
// | 6, 2)
// 在第2个元素后添加多个元素
buffer.insert(2, 7,8,9)
buffer //> res6: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1,
//| 7, 8, 9, 6, 2)
2.6 删除元素
// 删除位置是第2个元素
buffer.remove(2) //> res7: Int = 7
buffer //> res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 8,
//| 9, 6,2)
// 从第3个元素开始移除3个元素
buffer.remove(2, 3)
buffer //> res9: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 1, 2)
2.7 将动态数据转为数组
// 将数组缓冲转换为Array
buffer.toArray //> res10: Array[Int] = Array(1, 1, 2)
3 yield关键字及排序
3.1 yield关键字
yield关键字 for循环中的 yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中 for循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。
// 声明元素
val nums = Array(2,3,5,7,11) //> nums : Array[Int] = Array(2, 3, 5, 7, 11)
// nums中的元素都*2,并返回新的集合
var result = for(elem <-nums) yield 2 * elem //> result : Array[Int] = Array(4, 6, 10, 14, 22)
// 生成nums集合中值对2取余为0的数,乘2,返回新的集合
for(elem <-nums if elem %2 == 0) yield elem *2//> res11: Array[Int] = Array(4)
nums.filter(_ % 2 == 0).map { 2*_} //> res12: Array[Int] = Array(4)
3.2 Array求合
Array(1,7,2,9).sum //> res13: Int = 19
3.3 获取数组中最大长度元素
// 字符串获取长度最大的值
ArrayBuffer("Mary","had","a","little","lamb").max
3.4 排序
// 排序
val order = ArrayBuffer(1,7,2,9) //> order : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1,
//| 7, 2, 9)
val res = order.sorted //> res : scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2,
<pre name="code" class="java"> //| 7, 9)
3.5 quickSort排序
// 排序
val sortArr= Array(1,7,2,9) //> sortArr : Array[Int] = Array(1, 7, 2, 9)
Sorting.quickSort(sortArr)
// 使用and 连接元素
sortArr.mkString(" and ") //> res15: String = 1 and 2 and 7 and 9
// 前后以<>填充,中间以,分隔
sortArr.mkString("<",",",">") //> res16: String = <1,2,7,9>
4 多维数组
4.1 定义多维数组
// 多维数组\三行四列数组
val multiArr = Array.ofDim[Double](3,4); //> multiArr : Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0
//| .0, 0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0, 0.0))
multiArr(2)(1)=45
multiArr //> res17: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0, 0.0), Array(0.0, 0
//| .0, 0.0, 0.0), Array(0.0, 45.0, 0.0, 0.0))
4.2 数据嵌套
var triangle = new Array[Array[Int]](10) //> triangle : Array[Array[Int]] = Array(null, null, null, null, null,
//| null,null, null, null, null)
for(i <-0 until triangle.length)
triangle(i) = new Array[Int](i+1)
triangle //> res18: Array[Array[Int]] =
//| Array(
//| Array(0),
//| Array(0, 0) ,
//| Array(0, 0, 0),
//| Array(0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0, 0, 0, 0, 0),
//| Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
--以上为数组进阶实战的内容,谢谢大家对我的关注。
——厚积薄发(yuanxw)