이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 12장 써머리입니다.
요소
라고 하고 요소를 가리키는 위치값을 인덱스
라고 한다.var nums [5]int
nums[0] | nums[1] | nums[2] | nums[3] | nums[4] |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
days := [3]string{"monday", "tuesday", ""}
days[0] | days[1] | days[2] |
---|---|---|
"monday" | "tuesday" | "" |
nums := [5]int{1:10, 3:20}
nums[0] | nums[1] | nums[2] | nums[3] | nums[4] |
---|---|---|---|---|
0 | 10 | 0 | 20 | 0 |
...
를 사용하여 배열의 요소개수를 생략 가능nums := [...]int{1:10, 3:20} //len(nums) : 4
nums[0] | nums[1] | nums[2] | nums[3] |
---|---|---|---|
0 | 10 | 0 | 20 |
const Y int = 3
func main() {
x := 5
a := [x]int{1,2,3,4,5} // Error: non-constant array bound x
b := [Y]int{1,2,3,4,5}
c := [10]int
}
nums := [...]int{1:10, 3:20}
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
}
nums := [...]int{1:10, 3:20}
for i, v := range nums { // i: index, v: value
fmt.Println(i, v)
}
var a [10]int32
를 선언하면 int32값 10개를 저장할 수 있는 연속된 메모리 공간을 찾아 할당한다.(int32 타입은 4바이트이므로 연속된 40바이트를 할당)요소 위치 = 배열 시작 주소 + (인덱스 x 타입 크기)
O(1)
의 시간복잡도func Test_arrayCopy(t *testing.T) {
a := [5]int{1, 2, 3, 4, 5}
b := [5]int{500, 400, 300, 200, 100}
for i, v := range a {
fmt.Printf("a[%d] = %d\n", i, v)
}
for i, v := range b {
fmt.Printf("a[%d] = %d\n", i, v)
}
b = a
for i, v := range b {
fmt.Printf("a[%d] = %d\n", i, v)
}
}
다중 배열은 중첩된 배열을 말한다.
이중배열은 이차원 배열
이라 부르고, 삼중 배열은 삼차원 배열
이라고 부름
컴퓨터는 차원 형태로 데이터를 저장하지 않고 전체 요소 개수만큼 연속된 메모리 형태로 저장한다.
다중 배열 선언은 아래와 같다.
var b [2][5]int{
{1, 2, 3, 4, 5},
{6, 7, 8 ,9, 10},
}
}
가 마지막 요소와 같은 줄에 있지 않은 경우 마지막 항목 뒤에 쉼표 ,
를 찍어줘야 한다(IDE가 알아서 해준다)a := [5]int{1, 2, 3, 4, 5}
b := [5]int{
1,
2,
3,
4,
5,
}
배열이 선언되면 배열의 모든 요소를 연속되게 저장할 수 있는 메모리 공간을 할당한다.
배열 크기 = 타입 크기 x 항목 개수
[5]int32
배열은 4byte x 5 == 20byte 이다.