同じ 型 の 変数 があるとき、配列にまとめることができます。配列は コンテナ型 であり、そこで、[]type
([]float
など) により要素の型を指定します。配列が便利なのは、そこにどれだけ多くの要素を格納しても、要素にアクセスするためのコードを変更することなく、スケーリングできるからです。
たとえば、ゲームに複数のプレイヤーがいる場合、配列を作成し、すべてのプレイヤーで 初期化 できます。
Players : []player = array{Player1, Player2}
Verse は、定義が使用を反映するパターンをもちます。配列を定義してそれを使用することは、そのパターンに従っています。
配列の長さ
配列で メンバー Length
にアクセスすることで、配列における要素数を取得できます。たとえば、array{10, 20, 30}.Length
では 3 を返します。
配列の要素にアクセスする
配列の要素は配列に挿入した順番で配置され、それらの要素には インデックス と呼ばれる配列内の位置に基づいてアクセスできます。たとえば、第 1 プレイヤーを取得するには、Players 配列に Players[0]
でアクセスします。
配列の第 1 要素はインデックスが 0 で、それに続く要素のインデックスは 1 ずつ増えます。たとえば、array{10, 20, 30}[0]
では 10 で、array{10, 20, 30}[1]
は 20 です。
インデックス | 0 | 1 | 2 |
要素 | 10 | 20 | 30 |
配列の最終インデックスは、配列の長さより 1 だけ小さくなります。たとえば、array{10, 20, 30}.Length
は 3 で、array{10, 20, 30}
において 30 に対してインデックスは 2 です。
配列の要素へのアクセスは 失敗する可能性がある式 であり、if
式などの失敗コンテキストでのみ使用できます。その例を以下に示します。その例を以下に示します。
ExampleArray : []int = array{10, 20, 30, 40, 50}
for (Index := 0..ExampleArray.Length-1):
if (Element := ExampleArray[Index]):
Print("{Element} in ExampleArray at index {Index}")
このコードでは次のように出力されます。
10 in ExampleArray at index 0
20 in ExampleArray at index 1
30 in ExampleArray at index 2
40 in ExampleArray at index 3
50 in ExampleArray at index 4
配列とその要素を変更する
配列は、Verse における他のすべての 値 と同様に、不変 です。配列を変数として定義する場合、新しい配列を変数に割り当て、つまり個別の要素を変化させることができます。
その例を以下に示します。
# Array1 は整数の配列です
Array1 : []int = array{10, 11, 12}
# Array2 は整数の配列変数です
var Array2 : []int = array{20, 21, 22}
# Array1、Array2、そして新しい整数の配列を連結し、
# それを Array2 変数に代入します。
set Array2 = Array1 + Array2 + array{30, 31}
# we assign the integer 77 to index 1 of Array2
set Array2[1] = 77
for (Index := 0..Array2.Length-1):
if (Element := Array2[Index]):
Print("{Element} at index {Index}")
このコードでは次のように出力されます。
10 at index 0
77 at index 1
12 at index 2
20 at index 3
21 at index 4
22 at index 5
30 at index 6
31 at index 7
多次元配列
前に示した例の配列はすべて一次元でしたが、多次元配列も作成できます。多次元配列では、テーブルの行と列と同様に、各インデックスに別の (複数) 配列を格納できます。
たとえば、次のコードでは二次元 (2D) 配列を作成します。さらに次のテーブルで要素を示します。
var Counter : int = 0
Example : [][]int =
for (Row := 0..3):
for(Column := 0..2):
set Counter += 1
Column 0 | Column 1 | Column 2 | |
---|---|---|---|
行 0 | 1 | 2 | 3 |
行 1 | 4 | 5 | 6 |
行 2 | 7 | 8 | 9 |
行 3 | 10 | 11 | 12 |
2D 配列の要素にアクセスするには、2 つのインデックスを使用する必要があります。たとえば、Example[0][0]
は 1、Example[0][1]
は 2、Example[1][0]
は 4 です。
次のコードは、for
式を使って、Example
2D 配列で反復処理する方法を示します。
if (NumberOfColumns : int = Example[0].Length):
for(Row := 0..Example.Length-1, Column := 0..NumberOfColumns):
if (Element := Example[Row][Column]):
Print("{Element} at index [{Row}][{Column}]")
このコードでは次のように出力されます。
1 at index [0][0]
2 at index [0][1]
3 at index [0][2]
4 at index [1][0]
5 at index [1][1]
6 at index [1][2]
7 at index [2][0]
8 at index [2][1]
9 at index [2][2]
10 at index [3][0]
11 at index [3][1]
12 at index [3][2]
各行の列数は、定数である必要はありません。
たとえば、次のコードでは、テーブルに要素を示すように二次元 (2D) 配列を作成します。各行の列数は、前の行より小さくなります。
Example : [][]int =
for (Row := 0..3):
for(Column := 0..Row):
Row * Column
列 0 | 列 1 | 列 2 | 列 3 | |
---|---|---|---|---|
行 0 | 0 | |||
行 1 | 0 | 1 | ||
行 2 | 0 | 2 | 4 | |
行 3 | 0 | 3 | 6 | 9 |