Scala数组示例

时间:2020-02-23 14:41:45  来源:igfitidea点击:

Scala支持数组数据结构。
数组是固定大小的数据结构,用于存储相同数据类型的元素。
数组的第一个元素的索引为零,最后一个元素的元素总数为一。

Scala数组声明

声明数组变量的语法是

var arrayname = new Array[datatype](size)

var表示变量,arrayname是数组的名称,new是关键字,datatype表示数据的类型,例如整数,字符串和大小是数组中元素的数量。

例如,

var student = new Array[String](5)

Or 

var student:Array[String] = new Array[String](5)

这里的Student是一个包含五个元素的字符串数组。
可以将值分配给数组,如下所示。

var student = Array("John","Adam","Rob","Reena","Harry")

or 

student(0) = "Martin" ; student(1) = "Hyman" ; student(2) = "Jill" ; student(3) = "Paul" ; student(4) = "Kevin"

Scala 数组处理

在处理数组时,我们使用for循环,因为元素具有相同的数据类型。

考虑下面的示例。

object Student {
 def main(args: Array[String]) {
    var marks = Array(75,80,92,76,54)
    
    println("Array elements are : ")
      for ( m1 <- marks ) {
       println(m1 )
    }
       
    var gtot = 0.0
    for ( a <- 0 to (marks.length - 1)) {
       gtot += marks(a);
    }
    println("Grand Total : " + gtot);

 var average = 0.0
 average = gtot/5;
 println("Average : " + average);
}
}

其中我们正在创建Integer数据类型的marks数组。
我们正在使用for循环打印数组的元素。
我们正在通过添加所有元素来计算总分,并通过将总分除以受试者数来计算平均值。

下图显示了以上程序的执行。

Scala多维数组

多维数组可以定义为元素为数组的Array。

考虑下面的示例。

object Multidim {
def main(args:Array[String]) {
 val rows = 2
 val cols = 3
 val multidim = Array.ofDim[String](rows,cols)
 multidim(0)(0) = "Reena"
 multidim(0)(1) = "John"
 multidim(0)(2) = "Adam"
 multidim(1)(0) = "Michael"
 multidim(1)(1) = "Smith"
 multidim(1)(2) = "Steve"
 for {
 i <- 0 until rows
 j <- 0 until cols
 }
 println(s"($i)($j) = ${multidim(i)(j)}")
 }
}

我们使用" ofDim"方法创建一个包含2行3列的二维数组,该方法接受行和列作为参数。
将元素作为接受字符串参数的行和列添加到数组中。
我们使用for循环检索插入的元素。

将上面的代码保存在" Multidim.scala"中,并如下图所示运行。

Scala串联数组

可以使用concat方法来连接两个数组。
数组名称可以作为参数传递给concat方法。

下面是显示如何连接两个数组的示例。

import Array._

object Student {
 def main(args: Array[String]) {
    var sname = Array("John","Adam","Rob","Reena","Harry")      
    var sname1 = Array("Hyman","Jill","Henry","Mary","Rohan")

    var names =  concat( sname, sname1)
    println("Student name array elements are  : ");
      for ( n1 <- names ) {
       println( n1 )
    }
 }
}

由于数组方法concat是在包中定义的,因此我们必须使用import Array._。
我们声明了两个以学生姓名为元素的数组sname和sname1。
我们使用concat方法连接这两个数组,并将sname和sname1作为参数传递并将结果元素存储在names数组中。

将代码保存在Student.scala中,然后按照下图所示编译并运行。

具有范围的Scala数组

range()方法生成一个包含整数序列的数组。
最后一个参数用作生成整数序列的步骤。
如果未指定参数,则默认值为1。

让我们通过一个例子来了解这种范围方法。

import Array._

object Student {
 def main(args: Array[String]) {
    var id = range(7, 23, 3)
    var age = range(15,20)
    for ( s <- id ) {
       print( " " + s)
    }
    println()
    for ( a <- age ) {
       print( " " + a )
    }
 }
}

我们声明数组id和age并使用range方法生成元素。
元素从7到23递增3。
对于年龄,从15到20递增1的值。

通过输入Student.main(null)运行以上代码,您将看到以下输出。

7 10 13 16 19 22
 15 16 17 18 19

在结束本文之前,下面是一些有用的Array方法:

  • def concat [T](xss:Array [T] *):Array [T]:将所有数组合并为一个数组
  • def empty [T]:Array [T]:返回长度为0的数组
  • def ofDim T:Array [Array [T]]:创建二维数组
  • def range(开始:Int,结束:Int,步骤:Int):Array [Int]:返回一个数组,该数组包含某个整数间隔中的等距值
  • def copy(src:AnyRef,srcPos:Int,dest:AnyRef,destPos:Int,length:Int):单位:将一个数组复制到另一个
  • def ofDim T:Array [Array [Array [T]]]:创建一个三维数组