Tipet kompozite: Mapat

Mapa është koleksion i vlerave çift indeks-vlerë. Në gjuhët tjera iu referohemi si varg asociativ (associative array), hash table apo dictionary. Vlerat në një mapë kërkohen sipas çelësit/indeksit.

Mapa e zbrazët krijohet me sintaksën:

make(map[key-type]val-type)

Për shembull, për indeks të tipit int dhe vlera të tipit string, shkruajmë:

make(map[int]string)

Si indeks mund të përdoren tipet: int, float, numër kompleks, string, pointer, ose interfejs.

Mund të krijohen edhe mapa që përmbajnë mapa të tjera, p.sh.:

map[string]map[string]string

package main

import "fmt"

func main() {
    m := make(map[string]float32)
    m["jan"] = 430.75
    m["feb"] = 230.45
    m["mar"] = 130.25
    fmt.Println("map:", m)
}

https://play.golang.org/p/Mqk5n33s8JX

Rezultati:

map: map[feb:230.45 jan:430.75 mar:130.25]

Paraqitja e vlerave me një for loop:

package main

import "fmt"

func main() {
    m := make(map[string]float32)
    m["jan"] = 430.75
    m["feb"] = 230.45
    m["mar"] = 130.25
    for i, v := range m {
        fmt.Println(i, v)
    }
}

https://play.golang.org/p/t2Q0z-4kqOe

Rezultati:

jan 430.75
feb 230.45
mar 130.25

Numri i elementeve të mapës, përdoret funksioni len():

package main

import "fmt"

func main() {
    m := make(map[string]float32)
    m["jan"] = 430.75
    m["feb"] = 230.45
    m["mar"] = 130.25
    fmt.Println("len:", len(m))
}

https://play.golang.org/p/sYZNn4OJfEf

Rezultati:

Numri i elementeve: 3

Fshirja e një anëtari të mapës. Përdoret funksioni delete():

package main

import "fmt"

func main() {
    m := make(map[string]float32)
    m["jan"] = 430.75
    m["feb"] = 230.45
    m["mar"] = 130.25

    delete(m, "feb")
    for i, v := range m {
        fmt.Println(i, v)
    }
}

https://play.golang.org/p/syj0PtA5DbH

Rezultati:

mar 130.25
jan 430.75

Kur kërkojmë një anëtar të mapës me indeks që nuk ekziston, vlera e kthyer është zero, kështu që mund të jemi në konfuzion: a është vlera e anëtarit zero, apo nuk u gjet anëtari me atë indeks. Në situata të këtilla, i përdorim dy variabla, ku variabla e dytë do të ketë vlerë të tipit boolean (true ose false).

Nëse është true, anëtari me atë indeks ekziston, dhe nëse kthen false – anëtari me atë indeks nuk ekziston.

Nëse na nevojitet vetëm verifikimi i ekzistencës së një anëtari me indeks të caktuar, atëherë si variabël të parë e përdorim shenjën _.

package main

import "fmt"

func main() {
    m := make(map[string]float32)
    m["jan"] = 430.75
    m["feb"] = 230.45
    m["mar"] = 130.25

    v, ok := m["feb"]
    fmt.Println("Vlera e anëtarit m[\"feb\"]", v)

    if ok {
        fmt.Println("Anëtari me indeksin 'feb' ekziston")
    } else {
        fmt.Println("Anëtari me indeksin 'feb' nuk ekziston")
    }

    // Leximi i vlerës dhe verifikimi i ekzistencës së anëtarit
    v, ok = m["apr"]
    fmt.Println("Vlera e anëtarit m[\"apr\"]", v)

    if ok {
        fmt.Println("Anëtari me indeksin 'apr' ekziston")
    } else {
        fmt.Println("Anëtari me indeksin 'apr' nuk ekziston")
    }

    // Verifikimi i ekzistncës së anëtarit
    _, ok = m["may"]

    if ok {
        fmt.Println("Anëtari me indeksin 'may' ekziston")
    } else {
        fmt.Println("Anëtari me indeksin 'may' nuk ekziston")
    }
}

https://play.golang.org/p/__jke7ynjYE

Rezultati:

Vlera e anëtarit m["feb"] 230.45
Anëtari me indeksin 'feb' ekziston
Vlera e anëtarit m["apr"] 0
Anëtari me indeksin 'apr' nuk ekziston
Anëtari me indeksin 'may' nuk ekziston

Deklarimi dhe inicializimi i mapës:

package main

import "fmt"

func main() {
    m := map[string]float32{"jan": 430.75, "feb": 230.45, "mar": 130.25}
    fmt.Println(m)
}

https://play.golang.org/p/BKwfqr7omWk

Rezultati:

map[feb:230.45 jan:430.75 mar:130.25]
All Rights Reserved Theme by 404 THEME.