Eliminar de un Set
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 35 de 68.
A veces necesitas eliminar elementos de tu conjunto, y Go hace que esto sea sencillo utilizando la función integrada delete(). Dado que tu conjunto es en realidad un mapa por debajo, eliminar un elemento funciona exactamente igual que eliminar una clave de un mapa.
Para eliminar un elemento de tu set, utiliza la función delete() con tu set y el elemento que quieres eliminar:
delete(colors, "red")La función delete() toma dos parámetros: el mapa (tu conjunto) y la clave que deseas eliminar. Si el elemento existe en el conjunto, se elimina. Si el elemento no existe, la función no hace nada; no se lanza ningún error.
Este comportamiento es perfecto para los conjuntos porque a menudo se desea asegurar que un elemento no esté presente, independientemente de si estaba allí inicialmente. La operación es rápida y eficiente, manteniendo los beneficios de rendimiento de la implementación de mapas subyacente de Go.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Desafío
FácilConstruye un sistema de gestión de libros de biblioteca que elimine libros de diferentes colecciones de géneros utilizando el modismo de conjuntos (sets) de Go. Este desafío demuestra cómo usar la función delete() para eliminar elementos de conjuntos mientras se realiza un seguimiento del proceso de eliminación.
Recibirás dos entradas:
- Una cadena que contiene libros en la colección de ficción separados por comas (por ejemplo,
"1984,Dune,Foundation,Neuromancer,Brave New World") - Una cadena que contiene libros para eliminar separados por comas (por ejemplo,
"Dune,Harry Potter,Foundation,Twilight,1984")
Tu tarea es:
- Crear un conjunto utilizando el modismo de Go
map[string]struct{}para almacenar los libros de ficción - Analizar la primera cadena de entrada dividiéndola por comas para obtener los títulos de los libros individuales
- Agregar cada libro a tu conjunto utilizando el literal de estructura vacía
{}como valor - Analizar la segunda cadena de entrada dividiéndola por comas para obtener la lista de libros a eliminar
- Para cada libro a eliminar, verificar si existe en el conjunto utilizando el modismo "comma ok"
- Mostrar el proceso de eliminación para cada libro que se está procesando:
- Si el libro existe en la colección:
"Removing: [book_title]" - Si el libro no existe en la colección:
"Not found: [book_title]"
- Si el libro existe en la colección:
- Usar la función
delete()para eliminar los libros que existen en el conjunto - Después de procesar todas las solicitudes de eliminación, mostrar un resumen:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- Finalmente, listar todos los libros restantes en la colección:
- Encabezado:
"Remaining books in fiction collection:" - Cada libro en una línea separada:
"- [book_title]" - Si no quedan libros:
"- Collection is empty"
- Encabezado:
Usa el paquete strings para dividir las cadenas de entrada por comas. Este desafío demuestra cómo la función delete() elimina de forma segura elementos de un conjunto en Go, sin que se produzcan errores incluso al intentar eliminar elementos inexistentes, lo que la hace perfecta para operaciones de limpieza.
Hoja de referencia
Para eliminar elementos de un conjunto en Go, utiliza la función integrada delete():
delete(colors, "red")La función delete() toma dos parámetros: el mapa (tu conjunto) y la clave que quieres eliminar. Si el elemento existe, se elimina. Si no existe, la función no hace nada; no se lanza ningún error.
Esto hace que delete() sea perfecta para los conjuntos, ya que a menudo querrás asegurarte de que un elemento no esté presente, independientemente de si estaba allí inicialmente.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// Leer la entrada usando Scanner para admitir títulos de libros con espacios
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// Analizar las cadenas de entrada
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: Escribe tu código a continuación
// 1. Crear un conjunto usando map[string]struct{} para almacenar libros de ficción
// 2. Agregar cada libro de fictionList al conjunto
// 3. Procesar cada libro en removeList y verificar si existe
// 4. Mostrar el proceso de eliminación y usar la función delete()
// 5. Mostrar estadísticas de resumen
// 6. Listar los libros restantes en la colección
// Recuerda ordenar los libros restantes para una salida consistente
_ = sort.Strings // elimina esta línea una vez que uses sort
_ = fmt.Println // elimina esta línea una vez que uses fmt
}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 únicos