Track
/
Go
Go
/
Esercizi
/
Negozio all'ingrosso
Negozio all'ingrosso

Negozio all'ingrosso

Esercizio di apprendimento

Introduzione

In Go, map è un tipo di dato integrato che associa chiavi a valori. In altri linguaggi di programmazione, potresti conoscere il concetto di map come dizionario, tabella hash, archivio chiave/valore o array associativo.

A livello sintattico, map si presenta così:

map[KeyType]ElementType

È anche importante sapere che ogni chiave è unica: assegnare due volte la stessa chiave sovrascriverà il valore della chiave corrispondente.

Per creare una mappa, puoi fare così:

  // With map literal
  foo := map[string]int{}

oppure

  // or with make function
  foo := make(map[string]int)

Ecco alcune operazioni che puoi fare con una mappa:

  // 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")

Se provi a recuperare il valore di una chiave che non esiste nella mappa, otterrai il valore zero del tipo di valore. Questo può confonderti, soprattutto se il valore predefinito del tuo ElementType (per esempio, 0 per un int) è un valore valido. Per verificare se una chiave esiste nella mappa, puoi usare

  value, exists := foo["baz"]
  // If the key "baz" does not exist,
  // value: 0; exists: false

Istruzioni

Un tuo amico ha un vecchio negozio all'ingrosso chiamato Gross Store. Il nome deriva dalla quantità degli articoli che il negozio vende: è tutto in unità gross. Il tuo amico ti ha chiesto di implementare un sistema di punto vendita (POS) per il suo negozio. Per prima cosa, vuoi costruirne un prototipo. Nel prototipo, il sistema registrerà solo la quantità. Il tuo amico ti ha dato un elenco di unità di misura per aiutarti:

Unità Valore
quarter_of_a_dozen 3
half_of_a_dozen 6
dozen 12
small_gross 120
gross 144
great_gross 1728

1. Memorizza l'unità di misura nel programma

Per poter usare l'unità di misura, devi memorizzarla nel programma.

units := Units()
fmt.Println(units)
// Output: map[...] with entries like ("dozen": 12)

2. Crea un nuovo conto per il cliente

Devi implementare una funzione che crei un nuovo conto (vuoto) per il cliente.

bill := NewBill()
fmt.Println(bill)
// Output: map[]

3. Aggiungi un articolo al conto del cliente

Per implementarlo, dovrai:

  • Restituire false se unit non è presente nella mappa units.
  • Altrimenti, aggiungere l'articolo al bill del cliente, indicizzato con il nome dell'articolo, e restituire true.
  • Se l'articolo è già presente nel conto, aumentarne la quantità del valore corrispondente all'unit fornita.
bill := NewBill()
units := Units()
ok := AddItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: true (since dozen is a valid unit)

Nota che il valore restituito è di tipo bool.

4. Rimuovi un articolo dal conto del cliente

Per implementarlo, dovrai:

  • Restituire false se l'articolo fornito non è presente nel conto
  • Restituire false se unit non è presente nella mappa units.
  • Restituire false se la nuova quantità sarebbe inferiore a 0.
  • Se la nuova quantità è 0, rimuovere completamente l'articolo dal bill e restituire true.
  • Altrimenti, ridurre la quantità dell'articolo e restituire true.
bill := NewBill()
units := Units()
ok := RemoveItem(bill, units, "carrot", "dozen")
fmt.Println(ok)
// Output: false (because there are no carrots in the bill)

Nota che il valore restituito è di tipo bool.

5. Restituisci la quantità di un articolo specifico presente nel conto del cliente

Per implementarlo, dovrai:

  • Restituire 0 e false se item non è presente nel conto.
  • Altrimenti, restituire la quantità dell'articolo nel bill e true.
bill := map[string]int{"carrot": 12, "grapes": 3}
qty, ok := GetItem(bill, "carrot")
fmt.Println(qty)
// Output: 12
fmt.Println(ok)
// Output: true

Nota che i valori restituiti sono di tipo int e bool.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Go Exercism

Vuoi iniziare Negozio all'ingrosso?

Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.