Menu
Coddy logo textTech

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 un elemento específico existe en el conjunto. Aquí es donde el modismo "comma ok" de Go resulta increíblemente útil.

Para comprobar si un elemento existe en tu conjunto, utilizas la misma sintaxis que para comprobar 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")
}

El guion bajo _ se utiliza 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 sentencia if para obtener un código más conciso:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

Esta prueba de pertenencia es rápida y eficiente, aprovechando la implementación de mapas optimizada de Go para brindarte los beneficios de rendimiento de una verdadera estructura de datos de conjunto.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Construye un sistema de verificación de miembros del equipo que compruebe si personas específicas forman parte de un equipo de proyecto utilizando el modismo de conjunto (set) de Go. Este desafío demuestra cómo usar el modismo comma ok para probar la pertenencia a un conjunto.

Recibirás dos entradas:

  • Una cadena que contiene los miembros del equipo separados por comas (por ejemplo, "Alice,Bob,Charlie,Diana,Eve")
  • Una cadena que contiene las personas a verificar separadas por comas (por ejemplo, "Bob,Frank,Alice,Grace,Charlie")

Tu tarea es:

  1. Crear un conjunto utilizando el modismo de Go map[string]struct{} para almacenar a los miembros del equipo
  2. Analizar la primera cadena de entrada dividiéndola por comas para obtener los nombres individuales de los miembros del equipo
  3. Agregar cada miembro del equipo a tu conjunto utilizando el literal de estructura vacía {} como valor
  4. Analizar la segunda cadena de entrada dividiéndola por comas para obtener la lista de personas a verificar
  5. Para cada persona a verificar, utiliza el modismo comma ok _, ok := teamSet[person] para probar la pertenencia
  6. 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"
  7. Después de verificar a todas las personas, muestra 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 modismo comma ok proporciona una forma segura y eficiente de verificar la pertenencia en un conjunto de Go, devolviendo tanto el valor como un booleano que indica si la clave existe.

Hoja de referencia

Para comprobar si un elemento existe en un conjunto (mapa), utiliza el modismo "comma ok":

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

El guion bajo _ descarta el valor ya que solo nos importa la variable booleana ok que indica si la clave existe.

También puedes usar este patrón directamente en una sentencia if:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

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 las cadenas de entrada
	teamMembers := strings.Split(teamMembersInput, ",")
	peopleToCheck := strings.Split(peopleToCheckInput, ",")
	
	// TODO: Escribe tu código a continuación
	// Crear un conjunto usando map[string]struct{}
	// Agregar miembros del equipo al conjunto
	// Comprobar cada persona usando el modismo comma ok
	// Mostrar los resultados de la verificación y el resumen
	
}
quiz iconPonte a prueba

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