スカラ配列


Scala 言語で提供される配列は、同じ型の固定サイズの要素を格納するために使用されます。配列は、あらゆる編集言語にとって重要なデータ構造の 1 つです。

配列変数の宣言は、number0、number1、...、number99 を個別の変数として宣言することを意味するものではなく、数値のような変数を宣言し、数値[0]、数値[1]、...、数値を使用します。 [99] 個々の変数を表します。配列内の特定の要素にはインデックスによってアクセスします。

配列の最初の要素のインデックスは 0 で、最後の要素のインデックスは要素の総数から 1 を引いたものになります。


配列を宣言する

以下はScalaの配列宣言の構文形式です:

var z:Array[String] = new Array[String](3)

或

var z = new Array[String](3)

上記の構文では、zは文字列型の配列を宣言し、配列の長さは3で、3つの要素を格納できます。次のように、各要素に値を設定し、インデックスによって各要素にアクセスできます:

z(0) = "php"; z(1) = "Baidu"; z(4/2) = "Google"

最後の要素のインデックスは、z(2) = "Google" と同様に、式 4/2 をインデックスとして使用します。 。

次の方法で配列を定義することもできます:

var z = Array("php", "Baidu", "Google")

次の図は、長さ 10 とインデックス値 0 から 9 の配列 myList を示しています:

java_array.jpg


配列の処理

配列の要素の型と合計 配列のサイズが決まるため、配列要素を処理するときは通常、基本的な for ループを使用します。

次の例は、配列の作成、初期化、その他の処理を示しています:

object Test {
   def main(args: Array[String]) {
      var myList = Array(1.9, 2.9, 3.4, 3.5)
      
      // 输出所有数组元素
      for ( x <- myList ) {
         println( x )
      }

      // 计算数组所有元素的总会
      var total = 0.0;
      for ( i <- 0 to (myList.length - 1)) {
         total += myList(i);
      }
      println("总和为 " + total);

      // 查找数组中的最大元素
      var max = myList(0);
      for ( i <- 1 to (myList.length - 1) ) {
         if (myList(i) > max) max = myList(i);
      }
      println("最大值为 " + max);
    
   }
}

上記のコードを実行すると、出力結果は次のようになります:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
总和为 11.7
最大值为 3.5

多次元配列

多次元配列 1 つの配列の値は別の配列になる可能性があります。別の配列 の値は配列にすることもできます。行列とテーブルは一般的な 2 次元配列です。

上記は 2 次元配列を定義する例です:

var myMatrix = ofDim[Int](3,3)

この例では、配列には 3 つの配列要素が含まれており、各配列要素には 3 つの値が含まれています。

次に、2 次元配列処理の完全な例を見てみましょう:

import Array._

object Test {
   def main(args: Array[String]) {
      var myMatrix = ofDim[Int](3,3)
      
      // 创建矩阵
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            myMatrix(i)(j) = j;
         }
      }
      
      // 打印二维阵列
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            print(" " + myMatrix(i)(j));
         }
         println();
      }
    
   }
}

実行例»

上記のコードを実行すると、出力結果は次のようになります:

$ scalac Test.scala
$ scala Test
0 1 2
0 1 2
0 1 2

配列を結合する

次の例では、 concat() メソッドを使用して 2 つの配列をマージします。 concat() メソッドは複数の配列パラメータを受け入れます:

import Array._

object Test {
   def main(args: Array[String]) {
      var myList1 = Array(1.9, 2.9, 3.4, 3.5)
      var myList2 = Array(8.9, 7.9, 0.4, 1.5)

      var myList3 =  concat( myList1, myList2)
      
      // 输出所有数组元素
      for ( x <- myList3 ) {
         println( x )
      }
   }
}

上記のコードを実行すると、出力結果は次のようになります:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

範囲配列を作成する

次の例では、 range() メソッドを使用して、間隔内で配列を生成します。 range() メソッドの最後のパラメータはステップ サイズで、デフォルトは 1 です。

import Array._

object Test {
   def main(args: Array[String]) {
      var myList1 = range(10, 20, 2)
      var myList2 = range(10,20)

      // 输出所有数组元素
      for ( x <- myList1 ) {
         print( " " + x )
      }
      println()
      for ( x <- myList2 ) {
         print( " " + x )
      }
   }
}

上記のコードを実行すると、出力結果は次のようになります:

$ scalac Test.scala
$ scala Test
10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Scala 配列メソッド

次の表は、重要な処理方法です。 Scala 言語の配列を使用するには、import Array._ を使用してパッケージを導入する必要がある前に、それを使用します。

4 : Int )( f: (T) => T ): Array[T]6 def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 指定した長さの配列を作成します 二次元配列を作成3次元配列を作成 指定された範囲内で配列を作成します。step は各要素間のステップです 範囲内で配列を作成します指定された範囲 Array 指定された長さの配列を返します、配列の各要素は関数の戻り値を指定します。デフォルトでは 0 から始まります。
scala> Array.tabulate(3)(a => a + 5)
res0: Array[Int] = Array(5, 6, 7)
def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[ Array[T]]
シリアル番号メソッドと説明
1

def apply( x: T, xs: T* ): Array[T]

指定されたオブジェクト T の配列を作成します。 T の値は、Unit、Double、Float、Long、Int、Char、Short、Byte、Boolean です。

2

def concat[T]( xss: Array[T]* ): Array[T]

配列を統合

3

def copy( s rc:AnyRe f , srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit

ある配列を別の配列にコピーします。 Java の System.arraycopy(src, srcPos, dest, destPos, length) に相当します。

指定された長さの配列を返し、配列の各要素は指定された関数の戻り値です。

上記の配列例の初期値は 0、長さは 3、計算関数は a=>a+1

:

scala> Array.iterate(0,3)(a=>a+1)
res1: Array[Int] = Array(0, 1, 2)

def fill[T]( n: Int )(elem : => T): Array[T]

は配列を返します。長さは最初のパラメーターで指定され、各要素には 2 番目のパラメーターが入ります。

7

次の 2 つの配列の配列を返します。 length 1 つのパラメータが指定され、各要素は 2 番目のパラメータを使用して入力されます。 F8

def OFDIM [T] (N1 : Int): Array [T]

9

def OFDIM [T] (n1 : Int, n2: Int ): Array[Array[T]]

10

def ofDim[T]( n1: Int, n2: Int, n3: Int ) : Array[Array[Array[T]]]

11

def range( start: Int, end: Int, step: Int ): Array[Int]

12

def range( start: Int, end: Int ): Array[Int]

13

def tabulate[T]( n: Int )(f: (Int)=> T): Array[T]

上記の例は 3 つの要素を返します:

14

指定された長さの 2 次元配列を返します。デフォルトでは 0 から始まります。