수색…
소개
배열은 다른 데이터 형식의 요소 컬렉션을 나타내는 특정 데이터 형식입니다.
Go에서는 배열이 단순 할 수도 있고 (예를 들어 "목록"이라고도 함) 또는 다차원적일 수도 있습니다 (예 : 2 차원 배열은 요소가 포함 된 정렬 된 배열 컬렉션을 나타냅니다)
통사론
- var variableName [5] ArrayType // 크기가 5 인 배열을 선언합니다.
- var variableName [2] [3] ArrayType = {{값 1, 값 2, 값 3}, 값 4, 값 5, 값 6}} // 다차원 배열 선언
- variableName : = [...] ArrayType {Value1, Value2, Value3} // 크기 3의 배열 선언 (컴파일러는 배열 요소를 계산하여 크기를 정의합니다)
- arrayName [2] // 인덱스로 값을 얻는다.
- arrayName [5] = 0 // 인덱스에 값을 설정합니다.
- arrayName [0] // 배열의 첫 번째 값
- arrayName [len (arrayName) -1] // 배열의 마지막 값
배열 만들기
배열은 동일한 유형 요소의 정렬 된 컬렉션입니다.
배열을 나타내는 기본 표기법은 변수 이름에 []
를 사용하는 것입니다.
새로운 배열을 생성하는 것은 var array = [size]Type
처럼 보이며 size
를 숫자로 바꿉니다 (예를 들어 42
개가 42 개의 요소 목록으로 지정되도록 지정). Type
은 배열에 포함될 수있는 요소의 유형으로 Type
을 대체합니다. 예제 int
또는 string
)
아래에는 Go에 배열을 만드는 다른 방법을 보여주는 코드 예제가 있습니다.
// Creating arrays of 6 elements of type int,
// and put elements 1, 2, 3, 4, 5 and 6 inside it, in this exact order:
var array1 [6]int = [6]int {1, 2, 3, 4, 5, 6} // classical way
var array2 = [6]int {1, 2, 3, 4, 5, 6} // a less verbose way
var array3 = [...]int {1, 2, 3, 4, 5, 6} // the compiler will count the array elements by itself
fmt.Println("array1:", array1) // > [1 2 3 4 5 6]
fmt.Println("array2:", array2) // > [1 2 3 4 5 6]
fmt.Println("array3:", array3) // > [1 2 3 4 5 6]
// Creating arrays with default values inside:
zeros := [8]int{} // Create a list of 8 int filled with 0
ptrs := [8]*int{} // a list of int pointers, filled with 8 nil references ( <nil> )
emptystr := [8]string{} // a list of string filled with 8 times ""
fmt.Println("zeroes:", zeros) // > [0 0 0 0 0 0 0 0]
fmt.Println("ptrs:", ptrs) // > [<nil> <nil> <nil> <nil> <nil> <nil> <nil> <nil>]
fmt.Println("emptystr:", emptystr) // > [ ]
// values are empty strings, separated by spaces,
// so we can just see separating spaces
// Arrays are also working with a personalized type
type Data struct {
Number int
Text string
}
// Creating an array with 8 'Data' elements
// All the 8 elements will be like {0, ""} (Number = 0, Text = "")
structs := [8]Data{}
fmt.Println("structs:", structs) // > [{0 } {0 } {0 } {0 } {0 } {0 } {0 } {0 }]
// prints {0 } because Number are 0 and Text are empty; separated by a space
다차원 배열
다차원 배열은 기본적으로 다른 배열을 요소로 포함하는 배열입니다.
그것은 같이 표현된다 [sizeDim1][sizeDim2]..[sizeLastDim]type
, 대체 sizeDim
상기하는 치수의 길이에 대응하여 숫자 type
다차원 어레이의 데이터의 유형.
예를 들어 [2][3]int
는 3 개의 int 타입 요소 로 구성된 2 개의 하위 배열로 구성된 배열을 나타냅니다.
기본적으로 2 행 3 열의 행렬을 나타낼 수 있습니다 .
예를 들어 Year 0부터 매분마다 숫자를 저장해야하는 경우 var values := [2017][12][31][24][60]int
와 같은 방대한 차원의 숫자 배열을 만들 수 있습니다.
이러한 종류의 배열에 액세스하려면 마지막 예제에서 19:42에 2016-01-31의 값을 검색하면 values[2016][0][30][19][42]
액세스 values[2016][0][30][19][42]
( 배열 인덱스 0에서 시작하고 일과 월과 같이 1 에서 시작 하지 않음)
다음은 몇 가지 예입니다.
// Defining a 2d Array to represent a matrix like
// 1 2 3 So with 2 lines and 3 columns;
// 4 5 6
var multiDimArray := [2/*lines*/][3/*columns*/]int{ [3]int{1, 2, 3}, [3]int{4, 5, 6} }
// That can be simplified like this:
var simplified := [2][3]int{{1, 2, 3}, {4, 5, 6}}
// What does it looks like ?
fmt.Println(multiDimArray)
// > [[1 2 3] [4 5 6]]
fmt.Println(multiDimArray[0])
// > [1 2 3] (first line of the array)
fmt.Println(multiDimArray[0][1])
// > 2 (cell of line 0 (the first one), column 1 (the 2nd one))
// We can also define array with as much dimensions as we need
// here, initialized with all zeros
var multiDimArray := [2][4][3][2]string{}
fmt.Println(multiDimArray);
// Yeah, many dimensions stores many data
// > [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// We can set some values in the array's cells
multiDimArray[0][0][0][0] := "All zero indexes" // Setting the first value
multiDimArray[1][3][2][1] := "All indexes to max" // Setting the value at extreme location
fmt.Println(multiDimArray);
// If we could see in 4 dimensions, maybe we could see the result as a simple format
// > [[[["All zero indexes" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]]
// [[[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" ""]]]
// [[["" ""] ["" ""]] [["" ""] ["" ""]] [["" ""] ["" "All indexes to max"]]]]
배열 색인
배열 값은 배열에서 원하는 값의 위치를 지정하는 숫자를 사용하여 액세스해야합니다. 이 번호를 색인이라고합니다.
인덱스는 0 에서 시작하여 배열 길이 -1 에서 끝납니다.
값에 액세스하려면 arrayName[index]
와 같이 배열에서 값의 순위에 해당하는 숫자로 "index"를 대체해야합니다.
예 :
var array = [6]int {1, 2, 3, 4, 5, 6}
fmt.Println(array[-42]) // invalid array index -1 (index must be non-negative)
fmt.Println(array[-1]) // invalid array index -1 (index must be non-negative)
fmt.Println(array[0]) // > 1
fmt.Println(array[1]) // > 2
fmt.Println(array[2]) // > 3
fmt.Println(array[3]) // > 4
fmt.Println(array[4]) // > 5
fmt.Println(array[5]) // > 6
fmt.Println(array[6]) // invalid array index 6 (out of bounds for 6-element array)
fmt.Println(array[42]) // invalid array index 42 (out of bounds for 6-element array)
배열의 값을 설정하거나 수정하려면 방법이 동일해야합니다.
예:
var array = [6]int {1, 2, 3, 4, 5, 6}
fmt.Println(array) // > [1 2 3 4 5 6]
array[0] := 6
fmt.Println(array) // > [6 2 3 4 5 6]
array[1] := 5
fmt.Println(array) // > [6 5 3 4 5 6]
array[2] := 4
fmt.Println(array) // > [6 5 4 4 5 6]
array[3] := 3
fmt.Println(array) // > [6 5 4 3 5 6]
array[4] := 2
fmt.Println(array) // > [6 5 4 3 2 6]
array[5] := 1
fmt.Println(array) // > [6 5 4 3 2 1]