Verificando a Existência de Elementos
Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 34 de 68.
Agora que você pode adicionar elementos ao seu conjunto, a próxima operação essencial é verificar se um elemento específico existe no conjunto. É aqui que o idioma “comma ok” do Go se torna incrivelmente útil.
Para verificar se um elemento existe no seu conjunto, você usa a mesma sintaxe usada para verificar se uma chave existe em um mapa:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}O sublinhado _ é usado porque não nos importamos com o valor real (que é sempre uma struct vazia). Nós só nos importamos com a variável booleana ok, que nos informa se a chave existe.
Você também pode usar este padrão diretamente em uma instrução if para obter um código mais conciso:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Este teste de associação é rápido e eficiente, aproveitando a implementação otimizada de map do Go para oferecer os benefícios de desempenho de uma verdadeira estrutura de dados de conjunto.
Desafio
FácilCrie um sistema de verificação de membros da equipe que verifique se pessoas específicas fazem parte de uma equipe de projeto usando o idioma de conjunto do Go. Este desafio demonstra como usar o idioma comma ok para testar a associação a um conjunto.
Você receberá duas entradas:
- Uma string contendo os membros da equipe separados por vírgulas (por exemplo,
"Alice,Bob,Charlie,Diana,Eve") - Uma string contendo as pessoas a serem verificadas, separadas por vírgulas (por exemplo,
"Bob,Frank,Alice,Grace,Charlie")
Sua tarefa é:
- Criar um conjunto usando o idioma do Go
map[string]struct{}para armazenar os membros da equipe - Analisar a primeira string de entrada dividindo-a nas vírgulas para obter os nomes individuais dos membros da equipe
- Adicionar cada membro da equipe ao conjunto usando o literal de struct vazio
{}como valor - Analisar a segunda string de entrada dividindo-a nas vírgulas para obter a lista de pessoas a verificar
- Para cada pessoa a ser verificada, usar o idioma comma ok
_, ok := teamSet[person]para testar a associação - Exibir os resultados da verificação para cada pessoa que está sendo verificada:
- Se a pessoa estiver na equipe:
"[person] is on the team" - Se a pessoa não estiver na equipe:
"[person] is not on the team"
- Se a pessoa estiver na equipe:
- Depois de verificar todas as pessoas, exibir um resumo:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Use o pacote strings para dividir as strings de entrada nas vírgulas. Este desafio demonstra como o idioma comma ok oferece uma forma segura e eficiente de verificar a associação a um conjunto do Go, retornando tanto o valor quanto um booleano que indica se a chave existe.
Experimente você mesmo
package main
import (
"fmt"
"strings"
)
func main() {
// Ler entrada
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Analisar strings de entrada
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Escreva seu código abaixo
// Criar um set usando map[string]struct{}
// Adicionar membros da equipe ao set
// Verificar cada pessoa usando o idioma comma ok
// Exibir resultados da verificação e resumo
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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 Comportamentos6Go Idiomático: Conjuntos
O Idioma de Conjuntos em GoCriando um ConjuntoAdicionando a um ConjuntoVerificando a Existência de ElementosRemovendo de um ConjuntoIterando sobre um ConjuntoRecapitulação - Nomes de Usuário ÚnicosPratique por conta própria: Compilador de Go online