Colector de elementos únicos
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 68 de 68.
Desafío
FácilCrea un sistema de eliminación de duplicados que utilice el patrón de conjunto (set) idiomático de Go para filtrar elementos únicos de colecciones de cadenas. Este desafío pondrá a prueba tu capacidad para usar el idioma map[string]struct{} para rastrear elementos vistos y construir colecciones que contengan solo elementos únicos.
Recibirás dos entradas:
- Una cadena que contiene elementos separados por comas (por ejemplo,
"apple,banana,apple,orange,banana,grape,apple") - Una cadena que contiene elementos adicionales para fusionar, también separados por comas (por ejemplo,
"kiwi,apple,mango,banana,kiwi")
Tu tarea es:
- Crear una función llamada
getUniqueItemsque reciba un slice de cadenas y devuelva un nuevo slice que contenga solo las cadenas únicas - Dentro de esta función, usa el idioma
map[string]struct{}para rastrear qué elementos han sido vistos - Iterar a través del slice de entrada y para cada elemento:
- Verificar si el elemento existe en tu conjunto usando el idioma "comma ok"
- Si el elemento no se ha visto antes, agrégalo tanto al conjunto como al slice de resultados
- Analizar la primera entrada dividiéndola por comas para obtener la lista de elementos inicial
- Analizar la segunda entrada dividiéndola por comas para obtener los elementos adicionales
- Mostrar el encabezado del sistema:
"=== UNIQUE ITEM COLLECTOR ===" - Mostrar los elementos originales:
"Original items: [lista separada por comas de todos los elementos originales]" - Mostrar los elementos adicionales:
"Additional items: [lista separada por comas de todos los elementos adicionales]" - Usar tu función
getUniqueItemspara obtener elementos únicos de la lista original - Mostrar los elementos originales únicos:
"Unique original items: [lista separada por comas de elementos únicos de la lista original]" - Combinar ambos slices de entrada en un solo slice que contenga todos los elementos
- Usar tu función
getUniqueItemspara obtener elementos únicos de la lista combinada - Mostrar los elementos únicos finales:
"Final unique items: [lista separada por comas de todos los elementos únicos]" - Mostrar estadísticas de la colección:
"=== COLLECTION STATISTICS ===""Total original items: [conteo de elementos originales]""Total additional items: [conteo de elementos adicionales]""Total combined items: [conteo de todos los elementos combinados]""Unique items found: [conteo de elementos únicos]""Duplicates removed: [total de elementos combinados menos elementos únicos]"
- Mostrar el mensaje de finalización:
"Unique item collection completed successfully"
Usa el paquete strings para dividir las cadenas de entrada y el paquete fmt para la salida. Al unir elementos para su visualización, usa strings.Join con un separador de coma. Este desafío demuestra cómo el idioma de conjunto de Go resuelve eficientemente el problema común de eliminar duplicados de las colecciones, un patrón que usarás con frecuencia en aplicaciones de procesamiento de datos.
Pruébalo tú mismo
package main
import (
"fmt"
"strings"
)
func main() {
// Leer entrada
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Analizar las cadenas de entrada en slices
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Escribe tu código aquí
// 1. Crear la función getUniqueItems que use el modismo map[string]struct{}
// 2. Procesar los elementos originales para obtener elementos únicos
// 3. Combinar ambos slices y obtener elementos únicos de la lista combinada
// 4. Calcular estadísticas
// Mostrar encabezado del sistema
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Mostrar elementos originales y adicionales
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Mostrar elementos originales únicos, elementos únicos finales y estadísticas
// Usar fmt.Printf y strings.Join para el formateo de salida
}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 comportamientos