Coletor de Itens Únicos
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 68 de 68.
Desafio
FácilCrie um sistema de remoção de duplicatas que utiliza o padrão idiomático de conjunto (set) do Go para filtrar itens únicos de coleções de strings. Este desafio testará sua habilidade de usar o idioma map[string]struct{} para rastrear itens vistos e construir coleções contendo apenas elementos únicos.
Você receberá duas entradas:
- Uma string contendo itens separados por vírgulas (ex:
"apple,banana,apple,orange,banana,grape,apple") - Uma string contendo itens adicionais para mesclar, também separados por vírgulas (ex:
"kiwi,apple,mango,banana,kiwi")
Sua tarefa é:
- Criar uma função chamada
getUniqueItemsque recebe um slice de strings e retorna um novo slice contendo apenas as strings únicas - Dentro desta função, use o idioma
map[string]struct{}para rastrear quais itens foram vistos - Iterar pelo slice de entrada e para cada item:
- Verificar se o item existe no seu conjunto usando o idioma comma ok
- Se o item não tiver sido visto antes, adicione-o tanto ao conjunto quanto ao slice de resultado
- Analisar a primeira entrada dividindo-a por vírgulas para obter a lista de itens inicial
- Analisar a segunda entrada dividindo-a por vírgulas para obter os itens adicionais
- Exibir o cabeçalho do sistema:
"=== UNIQUE ITEM COLLECTOR ===" - Exibir os itens originais:
"Original items: [comma-separated list of all original items]" - Exibir os itens adicionais:
"Additional items: [comma-separated list of all additional items]" - Usar sua função
getUniqueItemspara obter itens únicos da lista original - Exibir os itens originais únicos:
"Unique original items: [comma-separated list of unique items from original list]" - Combinar ambos os slices de entrada em um único slice contendo todos os itens
- Usar sua função
getUniqueItemspara obter itens únicos da lista combinada - Exibir os itens únicos finais:
"Final unique items: [comma-separated list of all unique items]" - Exibir as estatísticas da coleção:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- Exibir a mensagem de conclusão:
"Unique item collection completed successfully"
Use o pacote strings para dividir as strings de entrada e o pacote fmt para a saída. Ao juntar itens para exibição, use strings.Join com um separador de vírgula. Este desafio demonstra como o idioma de conjunto do Go resolve eficientemente o problema comum de remover duplicatas de coleções, um padrão que você usará frequentemente em aplicações de processamento de dados.
Experimente você mesmo
package main
import (
"fmt"
"strings"
)
func main() {
// Ler entrada
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Analisar strings de entrada em fatias (slices)
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Escreva seu código aqui
// 1. Crie a função getUniqueItems que usa o idioma map[string]struct{}
// 2. Processe os itens originais para obter itens únicos
// 3. Combine ambas as fatias e obtenha itens únicos da lista combinada
// 4. Calcular estatísticas
// Exibir cabeçalho do sistema
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Exibir itens originais e adicionais
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Exibir itens originais únicos, itens únicos finais e estatísticas
// Use fmt.Printf e strings.Join para formatação de saída
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos