A Go-ban a map egy beépített adattípus, amely kulcsokat rendel értékekhez.
Más programozási nyelvekben a map fogalmát ismerheted szótár, hash-tábla, kulcs-érték tároló vagy asszociatív tömb néven.
Szintaktikailag a map így néz ki:
map[KeyType]ElementType
Azt is fontos tudni, hogy minden kulcs egyedi, ami azt jelenti, hogy ha ugyanazt a kulcsot kétszer rendeled hozzá, az felülírja a megfelelő kulcshoz tartozó értéket.
Egy map létrehozásához így tehetsz:
// With map literal
foo := map[string]int{}
vagy
// or with make function
foo := make(map[string]int)
Íme néhány művelet, amit egy map-pel elvégezhetsz
// Add a value in a map with the `=` operator:
foo["bar"] = 42
// Here we update the element of `bar`
foo["bar"] = 73
// To retrieve a map value, you can use
baz := foo["bar"]
// To delete an item from a map, you can use
delete(foo, "bar")
Ha olyan kulcs értékét próbálod lekérdezni, amely nem létezik a map-ben, akkor az értéktípus nullaértékét kapod vissza.
Ez összezavarhat, különösen akkor, ha az ElementType alapértéke (például egy int esetében a 0) érvényes érték.
Annak ellenőrzésére, hogy egy kulcs létezik-e a map-ben, ezt használhatod:
value, exists := foo["baz"]
// If the key "baz" does not exist,
// value: 0; exists: false
Az egyik barátodnak van egy régi nagykereskedése, Gross Store néven. A név onnan ered, hogy mennyiséget árul a bolt: mindent nagytucatban. A barátod megkért, hogy készíts egy értékesítési pont (POS) rendszert a boltja számára. Először egy prototípust szeretnél készíteni hozzá. A prototípusodban a rendszered csak a mennyiséget fogja rögzíteni. A barátod adott egy listát a mértékegységekről, hogy segítsen:
| Mértékegység | Érték |
|---|---|
| quarter_of_a_dozen | 3 |
| half_of_a_dozen | 6 |
| dozen | 12 |
| small_gross | 120 |
| gross | 144 |
| great_gross | 1728 |
Ahhoz, hogy használni tudd a mértékegységet, el kell tárolnod azt a programodban.
units := Units()
fmt.Println(units)
// Output: map[...] with entries like ("dozen": 12)
Ehhez egy olyan függvényt kell implementálnod, amely új (üres) számlát készít a vevő számára.
bill := NewBill()
fmt.Println(bill)
// Output: map[]
Ehhez a következőket kell tenned:
false értéket, ha a megadott unit nincs benne a units mapban.bill számlájára a termék neve szerint indexelve, majd add vissza a true értéket.unit-hoz tartozó értékkel.bill := NewBill()
units := Units()
ok := AddItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: true (since dozen is a valid unit)
Jegyezd meg, hogy a visszaadott érték típusa
bool.
Ehhez a következőket kell tenned:
false értéket, ha a megadott termék nincs a számlánfalse értéket, ha a megadott unit nincs benne a units mapban.false értéket, ha az új mennyiség 0-nál kevesebb lenne.bill számláról, majd add vissza a true értéket.true értéket.bill := NewBill()
units := Units()
ok := RemoveItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: false (because there are no carrots in the bill)
Jegyezd meg, hogy a visszaadott érték típusa
bool.
Ehhez a következőket kell tenned:
0 és a false értéket, ha az item nincs a számlán.bill-ben lévő mennyiségét és a true értéket.bill := map[string]int{"carrot": 12, "grapes": 3}
qty, ok := GetItem(bill, "carrot")
fmt.Println(qty)
// Output: 12
fmt.Println(ok)
// Output: true
Jegyezd meg, hogy a visszaadott értékek típusa
intésbool.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Go nyelvet 34 fogalom165 feladat segítségével, valódi emberi mentorálással, mindez ingyen.