This commit is contained in:
10 changed files with 257 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
// 1. Создайте типаж Summary с методом summarize(&self) -> String.
// 2. Реализуйте его длā:
// ○ Vec<T> (где T: ToString), метод должен соединāтþ ÿлементý ùерез запāтуĀ.
// ○ HashMap<K, V> (где K: ToString, V: ToString), метод должен вýводитþ парý key:value.
// 3. Напиúите функøиĀ print_summary<T: Summary>(item: T), котораā пеùатает резулþтат summarize().
use std::collections::HashMap;
// Определяем типаж Summary
trait Summary {
fn summarize(&self) -> String;
}
// Реализация для Vec<T> где T: ToString
// Реализация для HashMap<K, V> где K: ToString, V: ToString
impl<K: ToString, V: ToString> Summary for HashMap<K, V> {
fn summarize(&self) -> String {
self.iter()
.map(|(k, v)| format!("{}:{}", k.to_string(), v.to_string()))
.collect::<Vec<String>>()
.join(", ")
}
}
// Обобщённая функция для вывода сводки
fn main() {
// Пример с вектором
let vec = vec![1, 2, 3];
print_summary(vec); // "1, 2, 3"
// Пример с HashMap
let mut map = HashMap::new();
map.insert("name", "Alice");
map.insert("age", "30");
print_summary(map); // "name:Alice, age:30" (порядок может отличаться)
// Дополнительный пример с разными типами
let words = vec!["hello", "world"];
print_summary(words); // "hello, world"
let mut scores = HashMap::new();
scores.insert("math", 95);
scores.insert("science", 90);
print_summary(scores); // "math:95, science:90"
}