首页 > 大数据 > 数据分析 > 好程序员大数据学习路线分享Scala系列之数组
好程序员大数据学习路线分享Scala系列之数组, 数组(Array)
创建一个定长数组的方式
使用Array定义一个长度不变的数组
object ArrayDemo {
def main(args: Array[String]){
//
初始化一个长度为
8
的定长数组,其所有元素均为
0
val arr1 =
new Array[Int](8)
//
直接打印定长数组,内容为数组的
hashcode
值
println(arr1)
//
将数组转换成数组缓冲,就可以看到原数组中的内容了
//toBuffer
会将数组转换长数组缓冲
println(arr1.toBuffer)
//
注意:如果不使用
new
获取数组,相当于调用了数组的
apply
方法,直接为数组赋值
//
初始化一个长度为
1
,值为
10
的定长数组
val arr2 = Array[Int](10)
//
输出数组元素值
println(arr2.toBuffer)
//
定义一个长度为
3
的定长数组
val arr3 = Array("hadoop", "storm", "spark")
//
使用
()
来访问元素
println(arr3(2))
//
包含
10
个整数的数组,初始化值为
0
val nums =
new Array[Int](10)
//
遍历数组
for(i <- 0 until nums.length)
print(s"$i:${nums(i)} ")
println()
//
包含
10
个字符串的数组,初始化值为
null
val strs0 =
new Array[String](10)
for(i <- 0 until strs0.length)
print(s"$i:${strs0(i)} ")
println()
//
赋初值的字符串数组
val strs1 = Array("hello" ,"world")
for(i <- 0 until strs1.length)
print(s"$i:${strs1(i)} ")
println()
//
访问并修改元素值
strs1(0) = "byebye"
for(i <- 0 until strs1.length)
print(s"$i:${strs1(i)} ")
println()
}
}
result

定义变长数组的方式:
使用 ArrayBuffer定义长度按需变化的数组。
import scala.collection.mutable.ArrayBuffer
object VarArrayDemo {
def main(args: Array[String]){
//
定义一个空的可变长
Int
型数组
val nums = ArrayBuffer[Int]()
//
在尾端添加元素
nums += 1
//
在尾端添加多个元素
nums += (2,3,4,5)
//
使用
++=
在尾端添加任何集合
nums ++= Array(6,7,8)
//
这些操作符,有相应的
-=
,
--=
可以做数组的删减,用法同
+=
,
++=
//
使用
append
追加一个或者多个元素
nums.append(1)
nums.append(2,3)
//
在下标
2
之前插入元素
nums.insert(2,20)
nums.insert(2,30,30)
//
移除最后
2
元素
nums.trimEnd(2)
//
移除最开始的一个或者多个元素
nums.trimStart(1)
//
从下标
2
出移除一个或者多个元素
nums.remove(2)
nums.remove(2,2)
//
使用增强
for
循环进行数组遍历
for(elem <- nums)
println(elem)
//
基于下标访问使用增强
for
循环进行数组遍历
for(i <- 0 until nums.length)
println(nums(i))
}
}
执行结果:
1.增强for循环,参见变长数组的代码
2.好用的until会生成脚标,0 until 10 包含0不包含10 参见定长数组部分代码4.1.4. 数组转换
yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变
bject ArrayTransfer {
def main(args: Array[String]): Unit = {
//
使用
for
推导式生成一个新的数组
val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
val res1 =
for(elem <- a)
yield 2*elem
for(elem <- res1)
print(elem+" ")
println()
//
对原数组元素过滤后生成一个新的数组
//
将偶数取出乘以
10
后再生成一个新的数组
val res2 =
for(elem <- a
if elem%2 == 0)
yield 2*elem
for(elem <- res2)
print(elem+" ")
println()
//
使用
filter
和
map
转换出新的数组
val res3 = a.filter(_ % 2 == 0).map(2 * _)
for(elem <- res3)
print(elem+" ")
println()
}
执行结果:
在Scala中,数组上的某些方法对数组进行相应的操作非常方便!
object ArrayAlgorithm {
def main(args: Array[String]): Unit = {
val a = Array(9, 1, 2, 5, 3, 7, 8, 4)
//
求和
val res1 = a.sum
println(res1)
//
求最大值
val res2 = a.max
println(res2)
//
排序
val res3 = a.sorted
// val res4 = a.sortWith(_>_)
指定排序方式
for(elem <- res3)
print(elem + " ")
}
}
执行结果:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2655873/ ,如需转载,请注明出处,否则将追究法律责任。