Kurzusok
/
Go
Go
/
Feladatok
/
Gross Store
Gross Store

Gross Store

Tanulófeladat

Bevezetés

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

Utasítások

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

1. A mértékegység tárolása a programodban

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)

2. Új vevői számla létrehozása

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[]

3. Termék hozzáadása a vevő számlájához

Ehhez a következőket kell tenned:

  • Add vissza a false értéket, ha a megadott unit nincs benne a units mapban.
  • Egyébként vedd fel a terméket a vevő bill számlájára a termék neve szerint indexelve, majd add vissza a true értéket.
  • Ha a termék már szerepel a számlán, növeld a mennyiségét a megadott 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.

4. Termék eltávolítása a vevő számlájáról

Ehhez a következőket kell tenned:

  • Add vissza a false értéket, ha a megadott termék nincs a számlán
  • Add vissza a false értéket, ha a megadott unit nincs benne a units mapban.
  • Add vissza a false értéket, ha az új mennyiség 0-nál kevesebb lenne.
  • Ha az új mennyiség 0, teljesen távolítsd el a terméket a bill számláról, majd add vissza a true értéket.
  • Egyébként csökkentsd a termék mennyiségét, és add vissza a 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.

5. Egy adott termék mennyiségének visszaadása a vevő számlájáról

Ehhez a következőket kell tenned:

  • Add vissza a 0 és a false értéket, ha az item nincs a számlán.
  • Egyébként add vissza a termék 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 és bool.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Go Exercism

Készen állsz elkezdeni a(z) Gross Store feladatot?

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.