배열(Array)
- 배열은 같은 타입의 데이터들로 이루어진 타입이다.
- 컴퓨터에서 배열은 항상 0부터 시작한다.
- 배열은 자료구조(data structure) 중 하나이다.
- 자료구조는 데이터를 어떤 형태로 저장할지 나타내는 구조를 말한다.
- 배열은 연속된 메모리이다.
- 변수의 타입은 메모리의 크기를 나타낸다.
- 배열은 사이즈 * 변수 타입 메모리크기 만큼 메모리를 할당받는다.
- 이렇게 한번에 메모리를 할당받는 것을 chunk 라고한다.
알고리즘 기본기 다지기2.기초 데이터구조 (배열, 연결리스트)
배열 변수 선언
package main
import "fmt"
func main() {
//배열 초기값 선언
var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}
//배열의 인덱스는 0부터 시작한다.
//이를 이용하여 인덱스로 배열의 모든 값을 확인하는 반복문이다.
for i := 0; i < 5; i++ {
fmt.Println(t[i])
}
}
다양한 배열 변수 선언
배열 선언시 개수는 항상 상수이다.
배열은 고정된 길이를 갖는다.
//다양한 배열 변수 선언
func defineArray() {
//0 0 0 0 0
var nums [5]int
//초기값 선언
days := [3]string{"monday", "tuesday", "wednesday"}
//24.3 26.7 0 0 0
var temps [5]float64 = [5]float64{24.3, 26.7}
//특정 인덱스에 값을 선언
//0 10 0 30 0
var s = [5]int{1: 10, 3: 30}
//[...]은 선언된 초깃값의 갯수가 배열의 길이가 된다
// FOCUS. []int{10,20,30}과 동일하지 않다.
//[]int{10,20,30} 은 SLICE로 동적 배열이며 길이가 변할 수 있다.
x := [...]int{10, 20, 30}
}
배열 순회
내장함수 len()을 사용하여 길이만큼 순회를 할 수 있다. 혹은 range라는 키워드를 사용하여 해당 값을 순회할 수 있다.
package main
import "fmt"
func main() {
nums := [...]int{10, 20, 30, 40, 50} // = [5]int{10,20,30,40,50}
nums[2] = 300
//len()은 배열의 길이를 반환하는 내장함수이다.
for i := 0; i < len(nums); i++ {
fmt.Println(nums[i])
}
var t [5]float64 = [5]float64{24.0, 25.9, 27.8, 26.9, 26.2}
//range(범위)는 키워드 이다.
//range 뒤에는 자료구조/타입이 올 수 있다.
//range 뒤에 오는 자료구조 요소를 순회한다.
//배열의 경우, 인덱스와 값으로 이루어진 자료구조이다.
//range 뒤에 배열이 오면 인덱스와 값을 반환하게된다.
for i, v := range t {
fmt.Println(i, v)
}
}
배열 복사
출발지, 도착지 배열의 크기, 타입이 전부 동일해야 복사가 가능하다.
package main
import "fmt"
func main() {
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)
}
fmt.Println()
for i, v := range b {
fmt.Printf("b[%d] = %d\n", i, v)
}
//1. a의 값을 복사한다.(5 * 8bytes = 40 bytes)
//2. 그대로 복사한 값을 b의 값에 넣는다.
//3. a와 b의 값이 동일하지 않다면 복사를 할 수 없다.
//공간 크기가 같아야 복사가 가능하다.
b = a
fmt.Println()
for i, v := range b {
fmt.Printf("b[%d] = %d\n", i, v)
}
}
다중 배열
var b[2][5] int
var c[2][100][333][...]int
여러 차원의 배열이 선언될 수 있다.
package main
import "fmt"
func main() {
a := [2][5]int{
{1, 2, 3, 4, 5},
{5, 6, 7, 8, 9},
}
for _, arr := range a {
for _, v := range arr {
fmt.Print(v, " ")
}
fmt.Println()
}
}
참고
'Programming Language > go' 카테고리의 다른 글
Go 언어 프로그래밍 - 조건문과 반복문 (구조체, 포인터) (0) | 2021.07.14 |
---|---|
Go 언어 프로그래밍 - 메서드 (0) | 2021.07.12 |
Go 언어 프로그래밍 - 조건문과 반복문 (if문, switch문, for문) (0) | 2021.07.10 |
Go 언어 프로그래밍 - 함수와 상수 (0) | 2021.07.07 |
Go 언어 프로그래밍 - 슬라이스(Slice) (0) | 2021.07.05 |