🧩 Exercícios: Coleções Hash: Maps, Acesso, Delete e Existência
Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 12.1 — Criação de Map com make(map[K]V) e Operações Básicas
Contexto: Criação de Map com make(map[K]V) e Operações Básicas no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.
Requisitos de Execução:
- Inicializar mapa de usuários, inserir pares chave-valor e consultar por chave.
Resultado Esperado
Tabela hash manipulada com acesso em tempo constante O(1).
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_1_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
capitais := make(map[string]string)
capitais["BR"] = "Brasilia"
capitais["US"] = "Washington"
fmt.Printf("Capital BR: %s\n", capitais["BR"])
}
🔍 Nível 2: Prática
Problema 12.2 — Idiom Comma-OK para Verificação de Existência de Chave
Contexto: Idiom Comma-OK para Verificação de Existência de Chave no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.
Requisitos de Execução:
- Verificar se chave existe no mapa com
valor, existe := mapa[chave]diferenciando de zero value.
Resultado Esperado
Existência de chave validada com precisão sem falso positivo de zero value.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_2_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
pontos := map[string]int{"Carlos": 0}
if pts, ok := pontos["Carlos"]; ok {
fmt.Printf("Carlos existe no mapa com %d pontos!\n", pts)
}
if _, ok := pontos["Inexistente"]; !ok {
fmt.Println("Chave inexistente tratada com sucesso.")
}
}
⚡ Nível 3: Integração
Problema 12.3 — Exclusão com delete() e Iteração Aleatória com for range
Contexto: Exclusão com delete() e Iteração Aleatória com for range no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.
Requisitos de Execução:
- Deletar chave do mapa com
delete(mapa, chave)e iterar sobre as entradas restantes.
Resultado Esperado
Entrada removida do mapa com iteração não-determinística padrão do Go.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_3_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
cache := map[string]int{"a": 1, "b": 2, "c": 3}
delete(cache, "b")
for k, v := range cache {
fmt.Printf("%s=%d ", k, v)
}
fmt.Println()
}
🏆 Nível 4: Desafio Corporativo
Problema 12.4 — Mapa Seguro para Concorrência com sync.RWMutex ou sync.Map
Contexto: Mapa Seguro para Concorrência com sync.RWMutex ou sync.Map no contexto de Coleções Hash: Maps, Acesso, Delete e Existência.
Requisitos de Execução:
- Proteger mapa contra concorrência multithread utilizando
sync.RWMutexcomRLockeLock.
Resultado Esperado
Mapa protegido contra 'fatal error: concurrent map writes'.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_4_SeuNome - Envie na tarefa:
Atividade Cap 12 - Coleções Hash: Maps, Acesso, Delete e Existência
🔑 Gabarito de Código & Solução Comentada
package main
import (
"fmt"
"sync"
)
type SafeMap struct {
mu sync.RWMutex
m map[string]int
}
func (s *SafeMap) Set(k string, v int) {
s.mu.Lock(); defer s.mu.Unlock()
s.m[k] = v
}
func main() {
sm := SafeMap{m: make(map[string]int)}
sm.Set("visitas", 100)
fmt.Println("SafeMap thread-safe homologado.")
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |