같은 타입의 변수가 있는 경우 배열로 수집할 수 있습니다. 배열은 []float와 같은 []type으로 엘리먼트의 타입을 지정할 수 있는 컨테이너 타입입니다. 배열은 엘리먼트 액세스 코드를 변경하지 않고도 저장하는 엘리먼트의 수에 따라 스케일 조절할 수 있어 유용합니다.
예를 들어 게임에 다수의 플레이어가 있는 경우 배열을 생성하고 모든 플레이어와 함께 초기화할 수 있습니다.
Players : []player = array{Player1, Player2}Verse에는 정의 미러가 사용하는 패턴이 있습니다. 배열을 정의하고 사용할 때 이 패턴을 따릅니다.
배열 길이
배열에서 멤버 Length에 액세스하여 배열 내 엘리먼트의 수를 구할 수 있습니다. 예를 들어 array{10, 20, 30}.Length는 3을 반환합니다.
배열에서 엘리먼트에 액세스하기
배열의 엘리먼트는 삽입한 대로 배열의 같은 위치에 정렬되며 해당 위치에서 엘리먼트에 액세스할 수 있습니다. 이러한 위치를 배열의 인덱스라고 합니다. 예를 들어 첫 번째 플레이어를 구하려면 Players 배열에 Players[0]으로 액세스해야 합니다.
배열의 첫 번째 엘리먼트는 인덱스 0이며 이후 엘리먼트의 인덱스는 순서대로 숫자가 증가합니다. 예를 들어 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 is an array of integers
Array1 : []int = array{10, 11, 12}
# Array2 is an array variable of integers
var Array2 : []int = array{20, 21, 22}
# we concatenate Array1, Array2, and a new array of integers
# and assign that to the Array2 variable
set Array2 = Array1 + Array2 + array{30, 31}
이 코드는 다음을 프린트합니다.
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다차원 배열
이전 예시의 배열은 모두 1차원적이었지만 다차원 배열도 만들 수 있습니다. 다차원 배열에는 하나 이상의 추가 배열이 각 인덱스에 저장됩니다. 표의 행이나 열과 유사합니다.
예를 들어 다음 코드는 아래 표로 시각화되는 2차원(2D) 배열을 생성합니다.
var Counter : int = 0
Example : [][]int =
for (Row := 0..3):
for(Column := 0..2):
set Counter += 1| 열 0 | 열 1 | 열 2 | |
|---|---|---|---|
행 0 | 1 | 2 | 3 |
행 1 | 4 | 5 | 6 |
행 2 | 7 | 8 | 9 |
행 3 | 10 | 11 | 12 |
2D 배열의 엘리먼트에 액세스하려면 두 개의 인덱스를 사용해야 합니다. 예를 들어 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]
각 행의 열 수는 일정하지 않아도 됩니다.
예를 들어 다음 코드는 아래 표로 시각화되는 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 |
퍼시스턴스 타입
배열의 엘리먼트 타입이 퍼시스턴스인 경우, 배열은 퍼시스턴스입니다. 즉, 모듈 스코프 weak_map 변수에서 사용할 수 있으며 전체 게임 세션에서 값이 유지됩니다. Verse의 퍼시스턴스에 대한 자세한 내용은 Verse에서 퍼시스턴스 데이터 사용하기를 확인하세요.