«لیست کلیدواژه» یک ساختار دادهی کلید-مقدار است.
[month: "April", year: 2018]
لیست کلیدواژه، لیستی از تاپلهای {key, value} است و میتوان آن را به همین شکل هم نوشت، اما نگارش کوتاهتر آن رایجتر است.
[month: "April"] == [{:month, "April"}]
# => true
کلیدهای یک لیست کلیدواژه باید اتم باشند، اما برای مقدارها هیچ محدودیتی وجود ندارد. هر کلید را میتوان بیش از یک بار به کار برد. جفتهای کلید-مقدار در یک لیست کلیدواژه ترتیب مشخصی دارند.
میتوانید با لیست کلیدواژه هم درست مثل لیستها کار کنید، یا از ماژول Keyword استفاده کنید.
شما مدیر یک رستوران شیک هستید که انبار شراب بزرگی دارد. بسیاری از مشتریان شما از علاقهمندان سختپسند شراب هستند. پیدا کردن بطری مناسب شراب برای یک مشتری خاص کار آسانی نیست.
به عنوان صاحب رستورانی که با فناوری آشناست، تصمیم گرفتید فرایند انتخاب شراب را با نوشتن اپلیکیشنی سرعت ببخشید که به مهمانان اجازه میدهد شرابهای شما را بر اساس ترجیحاتشان فیلتر کنند.
در صفحهی خوشآمد اپلیکیشن خود میخواهید توضیح کوتاهی از هر رنگ شراب نمایش دهید.
تابع WineCellar.explain_colors/0 را پیادهسازی کنید. این تابع هیچ آرگومانی نمیگیرد و یک «لیست کلیدواژهای» برمیگرداند که در آن رنگهای شراب کلید و توضیحات مقدار هستند.
| رنگ | توضیح |
|---|---|
: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. |
یک بطری شراب به صورت یک «تاپل» ۳تایی از گونهی انگور، سال، و کشور مبدأ نمایش داده میشود. شرابها بر اساس رنگ شراب در یک لیست کلیدواژهای ذخیره میشوند.
[
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"}
# ]
تابع 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"}
# ]
تابع 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"
)
# => []