Le keyword list sono una struttura dati chiave-valore.
[month: "April", year: 2018]
Le keyword list sono liste di {key, value} tuple e possono essere scritte anche in quella forma, ma la sintassi più breve è quella più diffusa.
[month: "April"] == [{:month, "April"}]
# => true
Le chiavi di una keyword list devono essere atomi, mentre i valori possono essere qualsiasi cosa. Ogni chiave può essere usata più di una volta. Le coppie chiave-valore di una keyword list sono ordinate.
Puoi lavorare con le keyword list usando gli stessi approcci delle liste, oppure puoi usare il modulo Keyword.
Sei il manager di un ristorante elegante con una notevole cantina di vini. Molti dei tuoi clienti sono appassionati di vino esigenti. Trovare la bottiglia di vino giusta per un particolare cliente non è un compito facile.
Da proprietario di ristorante esperto di tecnologia, hai deciso di velocizzare il processo di selezione dei vini scrivendo un'app che permetta agli ospiti di filtrare i tuoi vini in base alle loro preferenze.
Nella schermata di benvenuto della tua app, vuoi mostrare una breve spiegazione di ogni colore di vino.
Implementa la funzione WineCellar.explain_colors/0. Non prende argomenti e restituisce una keyword list con i colori dei vini come chiavi e le spiegazioni come valori.
| Colore | Spiegazione |
|---|---|
:white |
Fermented without skin contact. |
:red |
Fermented with skin contact using dark-colored grapes. |
:rose |
Fermented with some skin contact, but not enough to qualify as a red wine. |
Una bottiglia di vino è rappresentata come una tupla di 3 elementi: varietà di uva, anno e paese di origine. I vini sono memorizzati per colore in una keyword list.
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
]
Implementa la funzione WineCellar.filter/3. Dovrebbe accettare una keyword list di vini, un atomo che rappresenta un colore e una keyword list di opzioni, con un valore predefinito di []. La funzione dovrebbe restituire un array di vini di un dato colore.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white
)
# => [
# {"Chardonnay", 2015, "Italy"},
# {"Pinot grigio", 2017, "Germany"}
# ]
Estendi la funzione WineCellar.filter/3. Quando riceve un'opzione :year, la funzione dovrebbe restituire un array di vini di un dato colore di un dato anno.
Usa la funzione WineCellar.filter_by_year/2 già implementata. Prende un array di vini e un anno come argomenti e restituisce un array di vini di un dato anno.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015
)
# => [
# {"Chardonnay", 2015, "Italy"}
# ]
Estendi la funzione WineCellar.filter/3. Quando riceve un'opzione :country, la funzione dovrebbe restituire un array di vini di un dato colore di un dato paese.
Usa la funzione WineCellar.filter_by_country/2 già implementata. Prende un array di vini e un paese come argomenti e restituisce un array di vini di un dato paese.
Assicurati che la funzione funzioni quando riceve sia l'opzione :year sia l'opzione :country, in qualsiasi ordine.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015,
country: "Germany"
)
# => []
Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.