酒窖

酒窖

學習練習

簡介

關鍵字陣列

關鍵字陣列是鍵值資料結構。

[month: "April", year: 2018]

關鍵字陣列是由{key, value}元組組成的陣列,也可以寫成那樣,但較短的語法更常被使用。

[month: "April"] == [{:month, "April"}]
# => true

關鍵字陣列中的鍵必須是原子,但值可以是任何東西。每個鍵可以使用多次。關鍵字陣列中的鍵值對是有序的。

你可以用處理陣列的相同方式來處理關鍵字陣列,或者使用Keyword模組。

說明

你是一間高級餐廳的經理,餐廳裡有一座規模不小的酒窖。你的顧客當中有許多是要求很高的葡萄酒愛好者。要為某位顧客找到合適的那瓶酒,可不是件容易的事。

身為一位熟悉科技的餐廳老闆,你決定寫一個應用程式,讓客人能依自己的偏好篩選你的葡萄酒,藉此加快選酒的流程。

1. 說明葡萄酒的顏色

在應用程式的歡迎畫面上,你想顯示每種葡萄酒顏色的簡短說明。

實作WineCellar.explain_colors/0函式。它不接受任何引數,並回傳一個關鍵字清單,以葡萄酒顏色為鍵、說明為值。

顏色 說明
:white 不經浸皮發酵。
:red 使用深色葡萄,經浸皮發酵。
:rose 經過部分浸皮發酵,但程度不足以稱為紅酒。

2. 取得指定顏色的所有葡萄酒

一瓶葡萄酒以葡萄品種、年份和原產國組成的三元組表示。這些葡萄酒會依顏色存放在關鍵字清單中。

[
  white: {"Chardonnay", 2015, "Italy"},
  white: {"Pinot grigio", 2017, "Germany"},
  red: {"Pinot noir", 2016, "France"},
  rose: {"Dornfelder", 2018, "Germany"}
]

實作WineCellar.filter/3函式。它應該接受一份葡萄酒的關鍵字清單、一個顏色原子,以及一份選項的關鍵字清單,預設值為[]。這個函式應回傳指定顏色的葡萄酒陣列。

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"}
#    ]

3. 取得指定顏色且指定年份裝瓶的所有葡萄酒

擴充WineCellar.filter/3函式。當傳入:year選項時,這個函式應回傳指定顏色且來自指定年份的葡萄酒陣列。

請使用已經實作好的WineCellar.filter_by_year/2函式。它接受一份葡萄酒陣列和一個年份作為引數,並回傳指定年份的葡萄酒陣列。

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"}
#    ]

4. 取得指定顏色且指定國家裝瓶的所有葡萄酒

擴充WineCellar.filter/3函式。當傳入:country選項時,這個函式應回傳指定顏色且來自指定國家的葡萄酒陣列。

請使用已經實作好的WineCellar.filter_by_country/2函式。它接受一份葡萄酒陣列和一個國家作為引數,並回傳指定國家的葡萄酒陣列。

請確保這個函式在同時傳入:year和:country選項時能正常運作,而且不限順序。

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

# => []
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 酒窖 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。