Scala Array&ArrayBuffer

Scala Array&ArrayBuffer

1.定长数组-Array

//方式一
  //长度为5的整数数组,所有元素初始化为0
  val ary1=new Array[Int](5)
  //长度为5的字符串数组,所有元素初始化为null
  val ary2=new Array[String](5)

//方式二
  //长度为2的数组,数据类型自动推断出来,已经提供初始值就不需要new关键字
  val ary3= Array("zhangsan","lisi")
  //
  val ary4= Array(1 to 10 :_*);

  println("数组的元素:"+ary1(0))
  //赋值
  ary1(0)=11
  println("改变后数组的元素:"+ary1(0))
  • 数组中的常用方法
  val numbers = Array(1, 2, 3, 4) //声明一个数组对象
  val first = numbers(0) // 读取第一个元素
  numbers(3) = 100 // 替换第四个元素为100
  val biggerNumbers = numbers.map(_ * 2) // 所有元素乘2

  val a = Array(1,2)
  val b = Array(3,4)
  val c = a ++ b
  //c中的内容是(1,2,3,4)
  
  val a = Array(1, 2, 3,4,4,5,6,6)
  val c = a.distinct
  println(c.mkString(","))    // 1,2,3,4,5,6

 mkString的使用
  var array=Array(1 to 10 : _ *)
  println(array.mkString)
  println(array.mkString(","))
  println(array.mkString("(",",",")"))
  结果:
  12345678910
  1,2,3,4,5,6,7,8,9,10
  (1,2,3,4,5,6,7,8,9,10)

 // 数组元素求和
 val a = Array(1, 2, 3, 4, 5)
 val sum = a.sum
 // 获取数组最大值
 val max = a.max
 //获取数组最小值
 val min = a.min
 // 对数组进行排序
 scala.util.Sorting.quickSort(a)
 // toString函数
 a.toString
 b.toString

2.ArrayBuffer-变长数组

  • 如果不想每次都使用全限定名,则可以预先导入ArrayBuffer类
    import scala.collection.mutable.ArrayBuffer
  //变长数组ArrayBuffer
  var numArrayBuffer = new ArrayBuffer[Int]();

  // 使用+=操作符,可以添加一个元素,或者多个元素
 // 这个语法必须要谨记在心!因为spark源码里大量使用了这种集合操作语法!
  numArrayBuffer += 1
  numArrayBuffer += (2, 3, 4, 5)
    // 使用++=操作符,可以添加其他集合中的所有元素
  numArrayBuffer ++= Array(6, 7, 8, 9, 10)

  // 使用insert()函数可以在指定位置插入元素
  // 但是这种操作效率很低,因为需要移动指定位置后的所有元素
  numArrayBuffer.insert(5, 6)
  numArrayBuffer.insert(6, 7, 8, 9, 10)
  // 使用remove()函数可以移除指定位置的元素
  numArrayBuffer.remove(1)
  numArrayBuffer.remove(1, 3)
  // Array与ArrayBuffer可以互相进行转换
  numArrayBuffer.toArray
  numArrayBuffer.toBuffer
  // 使用trimEnd()函数,可以从尾部截断指定个数的元素
  numArrayBuffer.trimEnd(5)

3.数组遍历

 for (i <- 0 until numArrayBuffer.length)
    println(numArrayBuffer(i))
  // 跳跃遍历Array / ArrayBuffer
  for(i <- 0 until (numArrayBuffer.length, 2))
    println(numArrayBuffer(i))
  // 从尾部遍历Array / ArrayBuffer
  for(i <- (0 until numArrayBuffer.length).reverse)
    println(numArrayBuffer(i))
  // 使用“增强for循环”遍历Array / ArrayBuffer
  for (e <- numArrayBuffer)
    println(e)

4. Array和Arraybuffer之间的转换

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val a = ArrayBuffer[Int]()
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

scala> a.to
to         toIndexedSeq   toList       toSeq      toString
toArray    toIterable     toMap        toSet      toTraversable
toBuffer   toIterator     toParArray   toStream   toVector

scala> a.toArray
res31: Array[Int] = Array()

scala>

数组间的转换不会修改原数组,而是产生一个新的数组.

5.多维数组

scala> val matrix = Array.ofDim[Double](2,3)
matrix: Array[Array[Double]] = Array(Array(0.0, 0.0, 0.0), Array(0.0, 0.0, 0.0))

scala> for(i <- 0  to 1 ;j <- 0 to 2){
   | matrix(i)(j) = i+j
   | }
scala> for(i <- 0  to 1 ;j <- 0 to 2){
   |  print(matrix(i)(j) +" ")
   | }
0.0 1.0 2.0 1.0 2.0 3.0
posted @ 2022-08-02 17:22  赤兔胭脂小吕布  阅读(62)  评论(0编辑  收藏  举报