упр.05 задача 1
- Краен срок:
- 12.11.2025 23:59
- Точки:
- 1
Срокът за предаване на решения е отминал
Имаше очудване как работи метода collect на итераторите.
Най-добрия начин човек да го разбере е да го имплементира стъпка по стъпка.
Решате задачата без да използвате имплементацията в стандартната библиотека.
pub trait MyFromIterator<A> {
fn my_from_iter<I>(iter: I) -> Self
where
I: Iterator<Item = A>;
}
Имплементирайте трейта за вектор, низ и хеш речник.
Добавете типови ограничения където се налага
// итератор по T -> Vec<T>
impl<???> MyFromIterator<???> for Vec<T> {
// ...
}
// итератор по char -> String
impl<???> MyFromIterator<???> for String {
// ...
}
// интератор по (K, V) -> HashMap<K, V>
impl<???> MyFromIterator<???> for HashMap<K, V> {
// ...
}
Имплементирайте функция my_collect, използваща MyFromIterator.
Добавете необходимите типови ограничения, където трябва.
fn my_collect<I, C>(iter: I) -> C {
todo!()
}
Функцията my_collect трябва да позволява конструиране на произволна колекция от произволен итератор, стига колекцията да имплементира MyFromIterator
let bytes: Vec<u8> = my_collect("hello".bytes());
let chars: Vec<char> = my_collect("hello".chars());
let index_to_char: HashMap<usize, char> = my_collect("hello".char_indices());
let digits: String = my_collect("1a2b3c4d".chars().filter(|c| c.is_digit(10)));
Задължително прочетете (или си припомнете): Указания за предаване на домашни
Погрижете се решението ви да се компилира с базовия тест:
