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 em seu conjunto, você usa a mesma sintaxe que usaria para verificar uma chave 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). Só nos importamos com a variável booleana ok, que nos diz se a chave existe.
Você também pode usar este padrão diretamente em uma instrução if para um código mais conciso:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Este teste de pertinência é 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 (set).
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilConstrua um sistema de verificação de membros de equipe que verifica se pessoas específicas fazem parte de uma equipe de projeto usando o idioma de conjunto (set) do Go. Este desafio demonstra como usar o idioma comma ok para testar a associação em um conjunto.
Você receberá duas entradas:
- Uma string contendo membros da equipe separados por vírgulas (ex:
"Alice,Bob,Charlie,Diana,Eve") - Uma string contendo pessoas para verificar separadas por vírgulas (ex:
"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 por vírgulas para obter os nomes individuais dos membros da equipe
- Adicionar cada membro da equipe ao seu conjunto usando o literal de struct vazia
{}como valor - Analisar a segunda string de entrada dividindo-a por vírgulas para obter a lista de pessoas a serem verificadas
- Para cada pessoa a verificar, use o idioma comma ok
_, ok := teamSet[person]para testar a associação - Exibir os resultados da verificação para cada pessoa 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:
- Após verificar todas as pessoas, exiba 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 por vírgulas. Este desafio demonstra como o idioma comma ok fornece uma maneira segura e eficiente de verificar a associação em um conjunto Go, retornando tanto o valor quanto um booleano indicando se a chave existe.
Folha de consulta
Para verificar se um elemento existe em um conjunto (map), use o idioma "comma ok":
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}O sublinhado _ descarta o valor, pois nos importamos apenas com a variável booleana ok que indica se a chave existe.
Você também pode usar este padrão diretamente em uma instrução if:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}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 as strings de entrada
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Escreva seu código abaixo
// Criar um conjunto usando map[string]struct{}
// Adicionar membros da equipe ao conjunto
// 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 Únicos