14 / 68

range

To'plamlarni aylanib chiqish

Go dasturlash tilida range operatori for sikli bilan birgalikda massivlar (array), slayslar (slice), satrlar (string) va map to'plamlari elementlarini birma-bir aylanib chiqish (iteratsiya qilish) uchun ishlatiladi.


1. range operatorining massivlar (Array) bilan qo'llanishi

Massiv elementlarini aylanib chiqishda range har bir iteratsiyada ikkita qiymat qaytaradi:

  1. Element indeksi (0, 1, 2...)
  2. Ushbu indeksdagi element qiymati
example.go
package main

import "fmt"

func main() {
    numbers := [5]int{21, 24, 27, 30, 33}

    // range yordamida massivni aylanamiz
    for index, item := range numbers {
        fmt.Printf("numbers[%d] = %d\n", index, item)
    }
}

Natija:

kod
numbers[0] = 21
numbers[1] = 24
numbers[2] = 27
numbers[3] = 30
numbers[4] = 33

[!TIP] Agar indeks kerak bo'lmasa, uni bo'sh identifikator _ bilan almashtirish mumkin:

example.go
for _, item := range numbers {
    fmt.Println(item)
}

2. range operatorining satrlar (String) bilan qo'llanishi

Satr (string) ustida range ishlatilganda, u har bir belgining indeksi va uning Unicode kodi (rune) qiymatini qaytaradi:

example.go
package main

import "fmt"

func main() {
    message := "Golang"

    fmt.Println("Indeks: Belgi")

    for i, char := range message {
        // %c formati butun sonni belgiga aylantirib chiqaradi
        fmt.Printf("%d: %c\n", i, char)
    }
}

Natija:

kod
Indeks: Belgi
0: G
1: o
2: l
3: a
4: n
5: g

3. range operatorining Map bilan qo'llanishi

Map to'plamlari bilan ishlaganda, range har bir aylanishda kalit (key) va unga mos qiymat (value) juftligini qaytaradi:

example.go
package main

import "fmt"

func main() {
    subjectMarks := map[string]float32{
        "Java":   80,
        "Python": 81,
        "Golang": 85,
    }

    fmt.Println("To'plangan ballar:")

    for subject, marks := range subjectMarks {
        fmt.Printf("%s: %g\n", subject, marks)
    }
}

Natija:

kod
To'plangan ballar:
Java: 80
Python: 81
Golang: 85

Map iteratsiyalari jadvali

IteratsiyaFan (Kalit / Key)Baho (Qiymat / Value)
1-iteratsiyaJava80
2-iteratsiyaPython81
3-iteratsiyaGolang85

4. Mapning faqat kalitlari (Keys) yoki faqat qiymatlarini (Values) olish

Faqat kalitlar kerak bo'lganda, ikkinchi o'zgaruvchini yozmaslik kifoya:

example.go
package main

import "fmt"

func main() {
    subjectMarks := map[string]float32{
        "Java":   80,
        "Python": 81,
        "Golang": 85,
    }

    fmt.Println("Fanlar ro'yxati:")
    for subject := range subjectMarks {
        fmt.Println(subject)
    }
}

Natija:

kod
Fanlar ro'yxati:
Java
Python
Golang

Faqat qiymatlar kerak bo'lganda esa, birinchi parametr o'rniga _ qo'yiladi:

example.go
for _, mark := range subjectMarks {
    fmt.Println(mark)
}