scala基础-数组

1、array的定义

1.1 最原始的创建数组的形式

val array = new Array[Int](5)
// 数据索引的下标是从0开始的
for(i <- 1.to(5)) array(i - 1) = i * 11 - 3
for(item <- array) print(item + "\t")

输出:

8   19  30  41  52  

1.2 最常见和经典的创建数组方式
val array2 = Array[Int](1, 3, 5, 7, 9),直接通过Array类名,并传入参数的方式来创建数组实例,在背后的实现是调用Array的工厂方法模式apply来构建出数组以及数组的内容。

/* 等价于 val array2 = Array.apply(1, 3, 5, 7, 9),
同时也可以直接写成val array2 = Array(1, 3, 5, 7, 9)(去掉[Int]泛型类型),
原因是scala有推倒类型的能力,已经传入当前数组array的值,所以可以根据值来推倒类型。*/
val array2 = Array[Int](1, 3, 5, 7, 9)
for(i <- 0.to(array2.length - 1)) println("array2(" + i + ") = "  + array2(i) )

输出:

array2(0) = 1
array2(1) = 3
array2(2) = 5
array2(3) = 7
array2(4) = 9

1.3 Array在底层的实现是借助了jvm平台上的java语言的数组的实现,java中数组是不可变的,所以Scala的Array也是不可变的!

2、可变数组的使用

2.1 定义可变数组ArrayBuffer
需要导入scala.collection.mutable.ArrayBuffer

   // 使用可变数组
   import scala.collection.mutable.ArrayBuffer
   val arrayBuffer = ArrayBuffer[Int]()
   // 使用for进行循环赋值
   for(i <- 2.to(10)) arrayBuffer  += (i * 5 -10)

2.2 ArrayBuffer常用方法

2.2.1 直接单个或者多个元素

// 直接赋值
   arrayBuffer += (33, 44, 55, 66)
// 在数组头增加元素
   arrayBuffer.+=:(99999999)

2.2.2 将数组增加大可变数组中

// 将某个数组添加到arrayBuffer中
   arrayBuffer ++= Array(111, 222, 333)
// 将某个数组添加到arrayBuffer的头部
   arrayBuffer.++=:(Array(66666, 77777))

2.2.3 在指定位置插入数组

// 在指定位置插入元素
   arrayBuffer.insert(3, 999, 9999)

输出数组

for(each_item <- arrayBuffer) print(each_item + "\t")
println()
66666   77777   99999999    999 9999    0   5   10  15  20  25  30  35  40  33  44  55  66  111 222 333

2.2.4 删除元素

 // 删除指定位置元素
   println("删除了下标为2的元素: " + arrayBuffer.remove(2))
// 在指定位置删除指定个数元素
   arrayBuffer.remove(5, 3)
   for(each_item <- arrayBuffer) {print(each_item + "\t")}

输出:

删除了下标为2的元素: 99999999
// arrayBuffer.remove(2)删除元素的同时返回被删除元素的值
66666   77777   999 9999    0   20  25  30  35  40  33  44  55  66  111 222 333

2.2.5 同时可以将可变数组转换为不可变数组赋值给其他数组

// 将ArrayBuffer变为Array不可变数组
val array4 = arrayBuffer.toArray
println(array4.mkString(","))

输出:

66666,77777,999,9999,0,20,25,30,35,40,33,44,55,66,111,222,333

2.2.6 使用下标打印,同时可以指定步长,倒叙打印

// 使用下标打印
for(i <- 0 until arrayBuffer.length) print(arrayBuffer(i) + "  ")
println()
// 同时可以指定步长
for(i <- 0 until (arrayBuffer.length, 2)) print(arrayBuffer(i) + "  ")
println()
// 倒序打印
for(i <- (0 until (arrayBuffer.length, 2)).reverse) print(arrayBuffer(i) + "  ")
println()

输出:

66666  77777  999  9999  0  20  25  30  35  40  33  44  55  66  111  222  333  
66666  999  0  25  35  33  55  111  333  
333  111  55  33  35  25  0  999  66666

2.2.7 数组的最大值、最小值、求和

// 数组元素求和, 最大值, 最小值
   println("sum of arrayBuffer: " + arrayBuffer.sum)
   println("max of arrayBuffer: " + arrayBuffer.max)
   println("min of arrayBuffer: " + arrayBuffer.min)

输出:

sum of arrayBuffer: 156455
max of arrayBuffer: 77777
min of arrayBuffer: 0

2.2.8 排序

 // 排序,但无返回值,会改变原有数组的值
   scala.util.Sorting.quickSort(array)
   // 同时可以是用分隔符打印
   println(array.mkString(","))

输出:

8,19,30,41,52

2.2.9 yield、filter、map在数组中使用

// 使用yield构造一个ArrayBuffer中偶数集合
   val array5 = for(each_item <- arrayBuffer if each_item % 2 == 0) yield each_item
   println(array5.mkString(","))

   // 使用过滤函数过滤出偶数
   println(arrayBuffer.filter(x => x % 2 == 0).mkString("**"))
   println(arrayBuffer.filter{x => x % 2 == 0}.mkString("  "))
   // 同时对每个元素做操作
   println(arrayBuffer.filter{x => x % 2 == 0}.map( x => x + 2).mkString("++"))
   // 对每个元素都有操作,所以可以进行省略,如下:
   println(arrayBuffer.filter{ _ % 2 == 0}.map( _ + 2).mkString("~~"))

输出:

66666,0,20,30,40,44,66,222
66666**0**20**30**40**44**66**222
66666  0  20  30  40  44  66  222
66668++2++22++32++42++46++68++224
66668~~2~~22~~32~~42~~46~~68~~224
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值