之前学习韩老师Scala课程中,做过一些笔记,见https://blog.csdn.net/wendaomudong_l2d4/article/details/104808712。部分用法没涉及到,重新做个整理,不定时Update~
主要内容:
- 增改删查
- 排序
增改删查
Array本身不可以增删元素,ArrayBuffer可以,具体不赘述,之前的笔记里有涉及。
- 查:可以用(index)的方式访问对应下标的元素
- 改:也可以指定下标修改元素值
- 位置索引从0开始
新建
Array的新建没啥好说的,Array(item1,item2)
即可
查单个元素
val arr0 = Array(1,2,3,4,5)
// until左闭右开,to左闭右闭
for (i<-0 until arr0.length){
println(s"arr($i) = "+arr0(i))
}
arr(0) = 1
arr(1) = 2
arr(2) = 3
arr(3) = 4
arr(4) = 5
arr0: Array[Int] = Array(1, 2, 3, 4, 5)
查多个元素
其实是想说数组的分片,即如果取多个元素
- slice函数可以提供分片功能
- 参数为元素位置索引slice(a,b)
- 和python分片list类似,从a取,一共取b-a个元素
arr0.slice(0,3)
res33: Array[Int] = Array(1, 2, 3)
改
这里的改指修改制定位置的元素
arr0(0)=666
arr0
res36: Array[Int] = Array(666, 2, 3, 4, 5)
合并
虽然Array没有增删功能,但是可以合并两个Array赋值给另一个Array
val arr1 = Array(0,1)
val arr2 = Array(2,3)
arr1++arr2
arr1: Array[Int] = Array(0, 1)
arr2: Array[Int] = Array(2, 3)
res37: Array[Int] = Array(0, 1, 2, 3)
排序
Array的排序逻辑比较简单,一般sort的逻辑无非指定排序的字段,以及升序还是降序。Array中则需要考虑对应的元素类型,看几个例子。
Array(Tuple)排序
Array中是元组,根据元组的第几个元素进行排序。有几个点需要注意:
- 指定元组的元素,通过tuple._1指定,索引从1开始
- 升降序,用正负号可以替代
- sortBy默认升序排序
- 我们默认一般情况下的排序都是对数值进行排序
val arr01 = Array((1,2),(3,1))
// 根据元组的第二个元素升序排序
// 这里第一个_指代每一个Array的元素,._2表示元组的第二个元素
arr01.sortBy(_._2)
arr01: Array[(Int, Int)] = Array((1,2), (3,1))
res4: Array[(Int, Int)] = Array((3,1), (1,2))
// 根据元组的第二个元素降序排序
arr01.sortBy(-_._2)
res5: Array[(Int, Int)] = Array((1,2), (3,1))
Array(Array)排序
整体逻辑和前面的一样,无非取元素的逻辑变了,另外Array的索引从0开始。直接看代码~
val arr02 = Array(Array(1,2),Array(3,1))
// 根据子元素(Array)的第二个元素升序排序
arr02.sortBy(_(1))
arr02: Array[Array[Int]] = Array(Array(1, 2), Array(3, 1))
res7: Array[Array[Int]] = Array(Array(3, 1), Array(1, 2))
// 根据子元素(Array)的第二个元素升序排序
arr02.sortBy(-_(1))
res8: Array[Array[Int]] = Array(Array(1, 2), Array(3, 1))
获取最大最小值
- 如果Array的子元素是数值(Int、Double),可以直接用max或者min
- 如果子元素还是集合,可以用maxBy和minBy
val arr03 = Array(1,2,3,4)
println("arr03.max = "+arr03.max)
println("arr03.min = "+arr03.min)
arr03.max = 4
arr03.min = 1
arr03: Array[Int] = Array(1, 2, 3, 4)
val arr04 = Array(Array(1,2),Array(3,1))
// arr04所有子元素中的第一个位置数值最大的
arr04.maxBy(_(0))
arr04: Array[Array[Int]] = Array(Array(1, 2), Array(3, 1))
res20: Array[Int] = Array(3, 1)
arr04.minBy(_(0))
res21: Array[Int] = Array(1, 2)
2020-03-24 于南京市江宁区九龙湖