API записів у Rust дає змогу зазирнути в один запис у мапі, яка може бути або HashMap, або BTreeMap.
Запис може бути зайнятим або вільним, а API надає методи для зміни вмісту цього запису.
У цій вправі ми використаємо HashMap разом із методами entry API, щоб розвʼязати просту задачу на алгоритм.
Маючи &[&str], що представляє слова журнальної статті, і &[&str], що представляє слова нотатки, яку ми хочемо надіслати, чи можемо ми скласти цю нотатку, вирізавши слова з журналу й наклеївши їх у листі?
Примітки:
Ми почнемо з такого підпису функції-заглушки:
pub fn can_construct_note(magazine: &[&str], note: &[&str]) -> bool {
todo!()
}
Для таких вхідних даних
let magazine = "two times three is not four".split_whitespace().collect::<Vec<&str>>();
let note = "two times two is four".split_whitespace().collect::<Vec<&str>>();
assert!(!can_construct_note(&magazine, ¬e));
функція повертає false, бо журнал містить лише один примірник "two", тоді як нотатка вимагає двох.
А такі вхідні дані дадуть успішний результат:
let magazine = "Astronomer Amy Mainzer spent hours chatting with Leonardo DiCaprio for Netflix's 'Don't Look Up'".split_whitespace().collect::<Vec<&str>>();
let note = "Amy Mainzer chatting with Leonardo DiCaprio"
.split_whitespace()
.collect::<Vec<&str>>();
assert!(can_construct_note(&magazine, ¬e));
Функція повертає true, бо журнал містить усі слова, яких вимагає нотатка.