第三课、Scala数组

1.数组定义

     一般数组定义:

     val array = new Array[Int](5)

     Scala中可这样定义:

     val array = Array(1,2,3,4,5)  //1.直接通过Array类名并传入参数的方式来创建数组实例,在背后的实现是调用Array的工厂方法模式apply来构建出数组及数组的内容的 2.在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推到的能力,而我们已经传进了当前数组Array的值,所以可以根据值来推导出类型;

     也可这样定义:

     val array = Array.apply(1,2,3,4,5)   //用括号传递给变量一个或多个参数时,Scala会把它转换成对apply()方法的调用

2.数组访问

    数组访问时从下标0开始,到length-1结束。值得注意的是Scala中的访问方式和Java、C#中不同

    int   i  =array(0)  //Scala中访问数组元素

    int   i  =array[0]   //java和c#中访问数组元素

3.数组遍历

   for(em<-array)   println(em)

   for(i<-0 until array.length)   println("i"+a(i))  //until是RichInt类的方法,返回所有小于(不包括)上限的数字

4.可变数组ArrayBuffer

    因为数组长度是不可变的,而我们在实际开发工作中,经常会需要数组长度与内容可变,因此便可用ArrayBuffer来实现

    Scala中的ArrayBuffer相当于Java中的ArrayList,因此许多方法也是一样的

    ArrayBuffer中的常用方法:

        val arrayBuffer = ArrayBuffer[Int]()

    1) 添加元素   insert

            arrayBuffer += 3
            arrayBuffer += (4,5,6,7,8,9,10)
            arrayBuffer ++= Array(1,2,3)      //元素都追加在数组末尾
            arrayBuffer.insert(arrayBuffer.length - 1, 100,1000)   //可指定位置追加元素,第一个参数为指定添加元素的位置,第二个参数为所添加的元素值(可以是一个,也可以是多  个)

    2)删除元素     remove

             arrayBuffer.remove(arrayBuffer.length -2)   //删除指定位置的元素

    3)获取最大值

              arrayBuffer.max    //数组也可用

     4)获取最小值

             arrayBuffer.min    //数组也可用

      5)获取数组中元素之和

             arrayBuffer.sum    //数组也可用

       6)升序

             arrayBuffer.sorted(_<_)

       7)降序

             arrayBuffer.sorted(_>_)

       8)反转

             arrayBuffer.reverse

      9)转为数组

             arrayBuffer.toArray

5.for(...)yield

    如果想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成的新数组,则可以通过yield语法来完成

    for(...)yield 循环创建了一个类型与原始集合相同的新集合。如果从数组出发,则会得到一个新的数组;如果从数组缓冲出发,则会得到一个新的数组缓冲

            val arrayAddedOne = for(item <- array) yield item + 1    //将数组中的每个元素都加一,并返回新数组

            val arrayEven = for(item <- array if item % 2 == 0) yield item   //返回数组中能被2整除的元素所组成的新数组

6.filter

     通过filter可根据条件过滤元素,效果与for(...)yield类似

          val b=a.filter { _%2==0 }.map { 2*_ }

          等价于

          val  result= for(em<-a if em%2==0) yield em*2

7.mkString

     指定分隔符,可根据需求分割数组元素,数组和缓冲数组都可用

         array.filter { x => x % 2 == 0}.mkString(" ")  //以空格位分隔符


        



  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪痕残

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值