首页技术文章正文

怎样定义Scala数组?数组遍历和数组转换是怎样操作的?

更新时间:2021-05-07 来源:黑马程序员 浏览量:

1577370495235_学IT就到黑马程序员.gif

对于每一门编程语言,数组(Array)都是重要的数据结构之一,主要用来存储数据类型相同的元素。下面,针对Scala数组的定义与使用、数组遍历以及数组转换操作进行详细介绍。

1.数组定义与使用

Scala中的数组分为定长数组和变长数组,这两种数组的定义方式如下:

new Array[T](数组长度) //定义定长数组

ArrayBuffer[T]()    //定义变长数组

上述语法格式中,定义定长数组,需要使用new关键字,而定义变长数组时,则需要导包import scala.collection.mutable.ArrayBuffer。[T]表示的是数组元素的类型,T为泛型。

当我们定义好数组后,可以对数组进行追加、插入以及删除等操作。针对不同的数组操作,Array提供了不同的API。

下面,我们通过一个例子来演示Scala数组简单使用,具体代码如文件1所示。

文件1 ArrayDemo.scala

   import scala.collection.mutable.ArrayBuffer

   object ArrayDemo {

     def main(args: Array[String]) {

       //初始化一个长度为8的定长数组,其所有元素均为0

       val arr1 = new Array[Int](8)

       //直接打印定长数组,内容为数组的hashcode值

       println(arr1)

       //变长数组(数组缓冲)

       //如果使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer

      val ab = ArrayBuffer[Int]()

      //向数组缓冲的尾部追加一个元素

      //+=尾部追加元素

      ab += 1

      println(ab)

      //追加多个元素

      ab += (2, 3, 4, 5)

      println(ab)

      //追加一个数组++=

      ab ++= Array(6, 7)

      println(ab)

       //追加一个数组缓冲

      ab ++= ArrayBuffer(8,9)

      println(ab)

      //打印数组缓冲ab

      //在数组某个位置插入元素用insert,从某下标插入

      ab.insert(0, -1, 0)

      println(ab)

      //删除数组某个位置的元素用remove按照下标删除

      ab.remove(0)

      println(ab)

    }

  }
上述代码中,第5-7行代码定义了一个定长数组arr1并打印数组对象;第10-30行代码定义了一个变长数组ab并对数组对象进行了追加、插入和删除等操作。

运行文件1中的代码,控制台输出结果如图1所示。

数组的定义与使用数组遍历以及数组转换操作

图1 Scala数组定义与使用的输出结果

2.数组遍历

Scala中,如果想要获取数组中的每一个元素,则需要将数组进行遍历操作。数组的遍历有三种方式,分别是for循环遍历、while循环遍历以及do...while循环遍历。在这里,我们使用for循环对数组进行遍历操作。具体代码如文件2所示。

文件2 ArrayTraversal.scala

   object ArrayTraversal {

     def main(args: Array[String]) {

       var myArr = Array(1.9, 2.9, 3.4, 3.5)

       // 打印输出所有的数组元素

       for (x <- myArr) {

         print(x + " ")

       }

       //打印换行

       println()

      // 计算数组所有元素的总和

      var total = 0.0;

      for (i <- 0 to (myArr.length - 1)) {

        total += myArr(i);

      }

      println("总和为 " + total);

      // 查找数组中的最大元素

      var max = myArr(0);

      for (i <- 1 to (myArr.length - 1)) {

        if (myArr(i) > max) max = myArr(i);

      }

      println("最大值为 " + max);

    }

  }

上述代码中,第3-7行代码定义了一个定长数组myArr并通过遍历打印该数组;第11-15行代码定义一个变量total并赋值为0.0,通过遍历计算数组所有元素的总和;第17-21行定义了一个变量max并赋值为数组myArr中的第一个元素,通过遍历查找出myArr数组中的最大元素。

运行文件2中的代码,控制台输出结果如图2所示。

数组的定义与使用数组遍历以及数组转换操作

图2 遍历数组的控制台打印输出

3.数组转换

数组转换就是通过yield关键字将原始的数组进行转换,会产生一个新的数组,然而原始的数组保持不变。下面我们来演示数组的转换,定义一个数组,实现将偶数取出乘以10后生成一个新的数组,具体代码如文件3所示。

文件3 ArrayYieldTest.scala

   object ArrayYieldTest {

     def main(args: Array[String]) {

       //定义一个数组

       val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

       //将偶数取出乘以10后再生成一个新的数组

       val newArr = for (e <- arr if e % 2 == 0) yield e * 10

       println(newArr.toBuffer)

     }

   }

上述代码中,第4-7行代码定义了一个定长数组arr并通过求偶和算术操作,将数组arr转换成一个新数组newArr,最终打印newArr数组。

运行文件3中的代码,控制台输出结果如图3所示。

数组的定义与使用数组遍历以及数组转换操作
图3 数组转换的控制台输出





猜你喜欢:

Scala的方法和函数讲解【黑马程序员】

如何使用IDEA工具开发Scala程序?

Scala是什么?Scala发展历程简介    

黑马程序员Python+大数据培训

分享到:
在线咨询 我要报名
和我们在线交谈!