Scala-arrays

提供:Dev Guides
移動先:案内検索

Scala-配列

Scalaには、同じタイプの要素の固定サイズの順次コレクションを格納する array というデータ構造が用意されています。 配列はデータのコレクションを格納するために使用されますが、配列を同じタイプの変数のコレクションと考える方が便利な場合がよくあります。

number0、number1、…​、number99などの個々の変数を宣言する代わりに、numbersなどの1つの配列変数を宣言し、numbers [0]、numbers [1]、…​、numbers [99]を使用して表現します個々の変数。 このチュートリアルでは、配列変数の宣言、配列の作成、およびインデックス付き変数を使用した配列の処理方法を紹介します。 配列の最初の要素のインデックスは数字のゼロであり、最後の要素のインデックスは要素の総数から1を引いたものです。

配列変数の宣言

プログラムで配列を使用するには、配列を参照する変数を宣言し、変数が参照できる配列のタイプを指定する必要があります。

以下は、配列変数を宣言するための構文です。

構文

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

or

var z = new Array[String](3)

ここで、zは、最大3つの要素を保持できる文字列の配列として宣言されます。 値は、個々の要素に割り当てるか、個々の要素にアクセスすることができます、それは次のようなコマンドを使用して行うことができます-

コマンド

z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"

ここで、最後の例は、一般に、インデックスは整数を生成する任意の式にできることを示しています。 配列を定義するもう1つの方法があります-

var z = Array("Zara", "Nuha", "Ayan")

次の図は、配列 myList を表しています。 ここで、 myList は10個のdouble値を保持し、インデックスは0〜9です。

スカラ配列

配列の処理

配列要素を処理するとき、配列内のすべての要素が同じ型であり、配列のサイズがわかっているため、ループ制御構造をよく使用します。

以下は、配列を作成、初期化、処理する方法を示すサンプルプログラムです-

object Demo {
   def main(args: Array[String]) {
      var myList = Array(1.9, 2.9, 3.4, 3.5)

     //Print all the array elements
      for ( x <- myList ) {
         println( x )
      }

     //Summing all elements
      var total = 0.0;

      for ( i <- 0 to (myList.length - 1)) {
         total &plus;= myList(i);
      }
      println("Total is " + total);

     //Finding the largest element
      var max = myList(0);

      for ( i <- 1 to (myList.length - 1) ) {
         if (myList(i) > max) max = myList(i);
      }

      println("Max is " &plus; max);
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5

Scalaはさまざまな配列操作を直接サポートせず、あらゆる次元で配列を処理するためのさまざまな方法を提供します。 異なる方法を使用する場合は、 Array ._ パッケージをインポートする必要があります。

多次元配列

多次元配列(つまり、要素が配列である配列)を定義して使用する必要がある多くの状況があります。 たとえば、マトリックスとテーブルは、2次元配列として実現できる構造の例です。

以下は、二次元配列を定義する例です-

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

これは、3つの要素を持つ整数の配列である3つの要素を持つ配列です。

次のサンプルプログラムを試して、多次元配列を処理してください-

import Array._

object Demo {
   def main(args: Array[String]) {
      var myMatrix = ofDim[Int](3,3)

     //build a matrix
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            myMatrix(i)(j) = j;
         }
      }

     //Print two dimensional array
      for (i <- 0 to 2) {
         for ( j <- 0 to 2) {
            print(" " &plus; myMatrix(i)(j));
         }
         println();
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

0 1 2
0 1 2
0 1 2

配列の連結

concat()メソッドを使用して2つの配列を連結する次の例を試してください。 concat()メソッドの引数として複数の配列を渡すことができます。

import Array._

object Demo {
   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)

     //Print all the array elements
      for ( x <- myList3 ) {
         println( x )
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

範囲付きの配列を作成

range()メソッドを使用して、指定された範囲で増加する整数のシーケンスを含む配列を生成します。 最終引数をステップとして使用して、シーケンスを作成できます。最終引数を使用しない場合、ステップは1と見なされます。

範囲(10、20、2)の配列を作成する例を見てみましょう。10〜20の要素と範囲の差2を持つ配列を作成することを意味します。 配列の要素は、10、12、14、16、および18です。

別の例:範囲(10、20)。 ここでは範囲の違いは与えられていないので、デフォルトでは1つの要素を想定しています。 範囲が1の10〜20の要素を持つ配列を作成します。 配列内の要素は、10、11、12、13、…、および19です。

次のプログラム例は、範囲を持つ配列を作成する方法を示しています。

import Array._

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

     //Print all the array elements
      for ( x <- myList1 ) {
         print( " " &plus; x )
      }

      println()
      for ( x <- myList2 ) {
         print( " " &plus; x )
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Scala配列メソッド

以下は重要なメソッドで、配列で遊んでいるときに使用できます。 上記のように、上記のメソッドを使用する前に Array ._ パッケージをインポートする必要があります。 利用可能なメソッドの完全なリストについては、Scalaの公式ドキュメントを確認してください。

Sr.No Methods with Description
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( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit

ある配列を別の配列にコピーします。 JavaのSystem.arraycopy(src、srcPos、dest、destPos、length)と同等です。

4

def empty[T]: Array[T]

長さ0の配列を返します

5

def iterate[T]( start: T, len: Int )( f: (T) ⇒ T ): Array[T]

関数の繰り返し適用を含む配列を開始値に戻します。

6

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

いくつかの要素計算の結果を複数回含む配列を返します。

7

def fill[T]( n1: Int, n2: Int )( elem: ⇒ T ): Array[Array[T]]

いくつかの要素計算の結果を複数回含む2次元配列を返します。

8

def iterate[T]( start: T, len: Int)( f: (T) ⇒ T ): Array[T]

関数の繰り返し適用を含む配列を開始値に戻します。

9

def ofDim[T]( n1: Int ): Array[T]

指定された次元で配列を作成します。

10

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

2次元配列を作成します

11

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

3次元配列を作成します

12

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

整数間隔で等間隔​​の値を含む配列を返します。

13

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

範囲内で増加する整数のシーケンスを含む配列を返します。

14

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

0から始まる整数値の範囲で指定された関数の値を含む配列を返します。

15

def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) ⇒ T): Array[Array[T]]

0から始まる整数値の範囲にわたって、指定された関数の値を含む2次元配列を返します。