数组Array的基本操作,进阶操作,多维数组

在其他语言中,数组Array是在内存中开辟一段连续的内存,一旦声明之后大小不在可变,scala中也是如此,当然scala也提供了长度可变的缓存数组,导入scala.collection.mutable.ArrayBuffer包即可使用缓存数组ArrayBuffer,对ArrayBuffer的操作非常灵活,可以直接用+=添加若干个元素,也可以添加一整个普通数组Array,但此时要使用++=

  def main(args: Array[String]): Unit = {
    import scala.collection.mutable.ArrayBuffer
    var b=ArrayBuffer[Int](4,2)
    println("b="+b)
    b+=99
    b+=(11,22)
    b++=Array(6,7,8)
    println(b)
  }

ArrayBuffer对外提供了很多操作方法:
trimEnd(n: Int): 删除最后n个元素
insert(n: Int, elems: Int*):在指定下标n之后插入可变参数传进来的值
remove(n: Int): 删除指定下标n的元素
remove(n: Int, count: Int):删除指定下标n及之后共count个元素

  def main(args: Array[String]): Unit = {
    import scala.collection.mutable.ArrayBuffer
    var b=ArrayBuffer[Int](9,8,7,6,5)
    b.trimEnd(3)
    println("after trimEnd  ="+b)

    b=ArrayBuffer[Int](9,8,7,6,5)
    b.insert(1, 99,98,97)
    println(b)


    b=ArrayBuffer[Int](9,8,7,6,5)
    b.remove(1)
    println(b)

    b=ArrayBuffer[Int](9,8,7,6,5)
    b.remove(1,3)
    println(b)
  }

sorted[B >: A](implicit ord: Ordering[B]): 不传参数可以实现默认的升序排序,排序规则可通过参数传入,特别要注意因为数组是不可变的,所以排完序后会返回一个新的数组,要赋给一个新变量保存
也可以通过 scala.util.Sorting包下的quickSort工具方法进行排序,该方法返回值为Unit,会直接对你原来数组中的值进行操作

  def main(args: Array[String]): Unit = {
    var a=Array[Int](5,4,6)
    var res=a.sorted
    println(a.toList)
    println(res.toList)

    var b=Array[Int](5,4,6)
    scala.util.Sorting.quickSort(b)
    println(b.toList)
  }

对普通数组Array的操作,我们可以在for循环里通过yield关键字在不改变原来数组的情况下,构造符合我们条件要求的数组,也可以通过在for语句中if过滤掉数组中的一些元素,也可以通过filter来过滤,map来构造新数组

  def main(args: Array[String]): Unit = {
    var a=Array(4,5,6,7,8)
    var res=for(item <- a) yield item*2
    println(res.toList)

    var res2=for(item <- a if(item%2==1)) yield item*2
    println(res2.toList)


    var res3=a.filter(_%2==1).map(_*2)
    println(res3.toList)

  }

多维数组的操作也是普遍会遇到的,特别是二维的矩阵操作,我们可以通过var matrix=Array.ofDim【Int】(3,4)创建一个3行4列的矩阵(下标从0开始),通过matrix(i)(j)访问对应行标列标的元素,注意matrix的length返回的是二维数组的行数,三维数组的建立也是类似,length返回第一维的长度

  def main(args: Array[String]): Unit = {
     var matrix=Array.ofDim[Int](3,4)
     matrix(0)(2)=99
     for(item <- 0 until matrix.length)
       println(matrix(item).toList)


     var triple=Array.ofDim[Int](3,4,5)
     println(triple.length)
  }

多维数组我们还可以通过另一种方法实现,通过将一维数组中的每个元素的值也是一个数组

  def main(args: Array[String]): Unit = {
       var triple=new Array[Array[Int]](10)
       for(i <- 0 to triple.length-1)
         triple(i)=new Array[Int](i)

       for(i <- 0 to triple.length-1)
         println(triple(i).toList)

  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值