Go / Массив

Массив

Массив (array) бол нэг төрлийн утгуудыг дарааллан хадгалдаг өгөгдлийн бүтэц юм. Go-д массивын хэмжээ нь тогтмол — үүсгэх үедээ тогтоогдоод цаашид өөрчлөгдөхгүй.

Массивыг сурсны дараа Go-ийн хамгийн их хэрэглэгддэг slice-г ойлгоход хялбар болно — slice нь массивын дээр баригдсан байдаг.

Массив үүсгэх

go
package main

import "fmt"

func main() {
    // 5 элементтэй int массив
    var тоонууд [5]int
    fmt.Println(тоонууд) // [0 0 0 0 0]

    // Утгуудтайгаар шууд үүсгэх
    өнгөнүүд := [3]string{"улаан", "ногоон", "цэнхэр"}
    fmt.Println(өнгөнүүд) // [улаан ногоон цэнхэр]

    // Элементийн тоог автоматаар тоолуулах
    оноонууд := [...]int{90, 85, 78, 92, 88}
    fmt.Println(оноонууд) // [90 85 78 92 88]
}

Дэлгэцэнд:

код
[0 0 0 0 0]
[улаан ногоон цэнхэр]
[90 85 78 92 88]

[5]int гэдэг нь "5 элементтэй int массив" гэсэн утгатай. [...] нь "элементүүдийг тоолж хэмжээг өөрөө тодорхойл" гэсэн үг.

Элементэд хандах

Массивын элементэд index ашиглан хандана. Index 0-ээс эхэлнэ:

go
package main

import "fmt"

func main() {
    гаригууд := [4]string{"Дэлхий", "Ангараг", "Бархасбадь", "Санчир"}

    fmt.Println(гаригууд[0]) // Дэлхий — эхний элемент
    fmt.Println(гаригууд[3]) // Санчир — сүүлийн элемент

    // Утга өөрчлөх
    гаригууд[1] = "Mars"
    fmt.Println(гаригууд[1]) // Mars

    // Массивын урт
    fmt.Println("Урт:", len(гаригууд)) // 4
}

Дэлгэцэнд:

код
Дэлхий
Санчир
Mars
Урт: 4

len() функц нь массивын элементийн тоог буцаана. 4 элементтэй массивын index нь 0, 1, 2, 3 байна. гаригууд[4] гэж хандахыг оролдвол runtime error гарна — болгоомжтой байна уу.

Массиваар давтах

for давталтаар массивын бүх элементийг дамжиж болно:

go
package main

import "fmt"

func main() {
    оноонууд := [5]int{70, 85, 90, 78, 95}

    // Ердийн for давталт
    нийт := 0
    for i := 0; i < len(оноонууд); i++ {
        нийт += оноонууд[i]
    }
    fmt.Println("Нийт:", нийт)
    fmt.Println("Дундаж:", нийт/len(оноонууд))

    // range ашигласан for — илүү Go-ийн хэв маяг
    fmt.Println("\nБүх оноонууд:")
    for i, оноо := range оноонууд {
        fmt.Printf("%d дугаарт: %d оноо\n", i+1, оноо)
    }
}

Дэлгэцэнд:

код
Нийт: 418
Дундаж: 83

Бүх оноонууд:
1 дугаарт: 70 оноо
2 дугаарт: 85 оноо
3 дугаарт: 90 оноо
4 дугаарт: 78 оноо
5 дугаарт: 95 оноо

range ашиглах нь Go-д илүү түгээмэл хэв маяг юм. i нь index, оноо нь тухайн элементийн утга.

Хоёр хэмжээст массив

Массив дотор массив байж болно — энэ нь хоёр хэмжээст массив юм:

go
package main

import "fmt"

func main() {
    // 3 мөр, 3 багана бүхий шахмал тоглоомын самбар
    самбар := [3][3]string{
        {"X", "O", "X"},
        {"O", "X", "O"},
        {"X", "O", "X"},
    }

    for _, мөр := range самбар {
        for _, нүд := range мөр {
            fmt.Print(нүд + " ")
        }
        fmt.Println()
    }
}

Дэлгэцэнд:

код
X O X
O X O
X O X

Go-д массивын хязгаарлалт

Go-д массивын хэмжээ тогтмол байдаг тул бодит программчлалд хэт их хэрэглэгддэггүй. Дараагийн хичээлд суралцах slice нь уян хатан хэмжээтэй тул илүү өргөн хэрэглэгддэг. Гэхдээ массив slice-ийн суурь болдог тул энэ ойлголтыг мэдэх нь чухал.

Дараагийн хичээлд:

Slice буюу Go-ийн хамгийн өргөн хэрэглэгддэг өгөгдлийн бүтцийг судална. Slice нь массивтай ижил боловч хэмжээ нь өөрчлөгддөг — элемент нэмж, хасаж болдог.