🧩 Exercícios: Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 12.1 — Tabela Hash com HashMap e Padrão Entry API
Contexto: Tabela Hash com HashMap e Padrão Entry API no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.
Requisitos de Execução:
- Contar frequência de palavras em texto utilizando
mapa.entry(palavra).or_insert(0).
Resultado Esperado
Contagem de frequência calculada via Entry API em passagem única.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// hashmap_entry.rs
use std::collections::HashMap;
fn main() {
let texto = "rust sistemas rust alta performance";
let mut contagem = HashMap::new();
for palavra in texto.split_whitespace() {
*contagem.entry(palavra).or_insert(0) += 1;
}
println!("Contagem: {:?}", contagem);
}
🔍 Nível 2: Prática
Problema 12.2 — Conjuntos com HashSet e Operações de Teoria dos Conjuntos
Contexto: Conjuntos com HashSet e Operações de Teoria dos Conjuntos no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.
Requisitos de Execução:
- Calcular interseção e união entre dois
HashSetde identificadores de permissão.
Resultado Esperado
Interseção de conjuntos calculada com complexidade O(N).
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_2_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// hashset_ops.rs
use std::collections::HashSet;
fn main() {
let admin_perms: HashSet<_> = ["read", "write", "delete"].into();
let user_perms: HashSet<_> = ["read", "write"].into();
let comuns: Vec<_> = admin_perms.intersection(&user_perms).collect();
println!("Permissoes comuns: {:?}", comuns);
}
⚡ Nível 3: Integração
Problema 12.3 — Pipeline de Iteradores com .map(), .filter() e .collect()
Contexto: Pipeline de Iteradores com .map(), .filter() e .collect() no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.
Requisitos de Execução:
- Filtrar números pares, elevar ao quadrado e coletar em um novo
Vec<i32>.
Resultado Esperado
Pipeline de iteradores avaliado com zero alocações intermediárias.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_3_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// iterator_pipeline.rs
fn main() {
let nums = vec![1, 2, 3, 4, 5, 6];
let pares_ao_quadrado: Vec<i32> = nums.into_iter()
.filter(|&n| n % 2 == 0)
.map(|n| n * n)
.collect();
println!("Resultado: {:?}", pares_ao_quadrado);
}
🏆 Nível 4: Desafio Corporativo
Problema 12.4 — Criação de Custom Iterator Implementando a Trait Iterator
Contexto: Criação de Custom Iterator Implementando a Trait Iterator no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.
Requisitos de Execução:
- Criar struct
ContadorFibonacciimplementando a traitIteratorcom métodonext().
Resultado Esperado
Iterador customizado gerando sequência infinita de Fibonacci sob demanda.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_4_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// custom_iterator.rs
struct FiboIter { a: u64, b: u64 }
impl FiboIter { fn new() -> Self { Self { a: 0, b: 1 } } }
impl Iterator for FiboIter {
type Item = u64;
fn next(&mut self) -> Option<Self::Item> {
let atual = self.a;
self.a = self.b;
self.b = atual + self.b;
Some(atual)
}
}
fn main() {
let primeiros_5: Vec<_> = FiboIter::new().take(5).collect();
println!("Fibo: {:?}", primeiros_5);
}