Comprobar pertenencia
Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 34 de 68.
Ahora que puedes añadir elementos a tu conjunto, la siguiente operación esencial es comprobar si existe un elemento específico en el conjunto. Aquí es donde el modismo «comma ok» de Go resulta increíblemente útil.
Para comprobar si existe un elemento en tu conjunto, usas la misma sintaxis que para comprobar si existe una clave en un mapa:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}Se usa el guion bajo _ porque no nos importa el valor real (que siempre es una estructura vacía). Solo nos importa la variable booleana ok, que nos indica si la clave existe.
También puedes usar este patrón directamente en una instrucción if para obtener un código más conciso:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}Esta comprobación de pertenencia es rápida y eficiente, ya que aprovecha la implementación optimizada de map de Go para ofrecerte las ventajas de rendimiento de una verdadera estructura de datos de conjunto.
Desafío
FácilConstruye un sistema de verificación de miembros del equipo que compruebe si determinadas personas forman parte de un equipo de proyecto utilizando el idiom de conjuntos de Go. Este desafío demuestra cómo usar el idiom comma ok para comprobar la pertenencia a un conjunto.
Recibirás dos entradas:
- Una cadena que contiene miembros del equipo separados por comas (por ejemplo,
"Alice,Bob,Charlie,Diana,Eve") - Una cadena que contiene las personas que se deben comprobar, separadas por comas (por ejemplo,
"Bob,Frank,Alice,Grace,Charlie")
Tu tarea consiste en:
- Crear un conjunto utilizando el idiom de Go
map[string]struct{}para almacenar a los miembros del equipo - Analizar la primera cadena de entrada dividiéndola por comas para obtener los nombres individuales de los miembros del equipo
- Añadir cada miembro del equipo al conjunto utilizando el literal de estructura vacío
{}como valor - Analizar la segunda cadena de entrada dividiéndola por comas para obtener la lista de personas que se deben verificar
- Para cada persona que se debe comprobar, utilizar el idiom comma ok
_, ok := teamSet[person]para comprobar su pertenencia - Mostrar los resultados de la verificación para cada persona que se está comprobando:
- Si la persona está en el equipo:
"[person] is on the team" - Si la persona no está en el equipo:
"[person] is not on the team"
- Si la persona está en el equipo:
- Después de comprobar a todas las personas, mostrar un resumen:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Utiliza el paquete strings para dividir las cadenas de entrada por comas. Este desafío demuestra cómo el idiom comma ok proporciona una forma segura y eficiente de comprobar la pertenencia a un conjunto de Go, devolviendo tanto el valor como un booleano que indica si la clave existe.
Pruébalo tú mismo
package main
import (
"fmt"
"strings"
)
func main() {
// Leer entrada
var teamMembersInput string
var peopleToCheckInput string
fmt.Scanln(&teamMembersInput)
fmt.Scanln(&peopleToCheckInput)
// Analizar cadenas de entrada
teamMembers := strings.Split(teamMembersInput, ",")
peopleToCheck := strings.Split(peopleToCheckInput, ",")
// TODO: Escribe tu código debajo
// Crear un conjunto usando map[string]struct{}
// Añadir miembros del equipo al conjunto
// Comprobar cada persona usando el idioma comma ok
// Mostrar resultados de verificación y resumen
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos6Go idiomático: Sets
El modismo de Set en GoCrear un SetAñadir a un SetComprobar pertenenciaEliminar de un SetIterar sobre un SetResumen: Nombres de usuario únicosPractica por tu cuenta: Compilador de Go online