Matemáticas - Intersección de HashSet
Parte de la sección Lógica y Flujo del Journey de C# de Coddy. Lección 63 de 66.
La intersección de dos conjuntos contiene solo los elementos que aparecen en ambos conjuntos.
Crea dos HashSets:
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4, 5 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6, 7 };Para encontrar la intersección, usa el método IntersectWith:
set1.IntersectWith(set2);Después de ejecutar este código, set1 contendrá:
{ 3, 4, 5 }El método IntersectWith modifica el conjunto sobre el que se llama y conserva solo los elementos que existen en ambos conjuntos.
Para crear un nuevo conjunto con la intersección sin modificar los conjuntos originales, puedes:
HashSet<int> intersection = new HashSet<int>(set1);
intersection.IntersectWith(set2);Desafío
IntermedioCrea un método llamado FindCommonElements que tome dos argumentos:
- Un HashSet de enteros (
set1) - Un HashSet de enteros (
set2)
El método debe devolver un nuevo HashSet que contenga solo los elementos que aparecen en ambos conjuntos (la intersección).
Pruébalo tú mismo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Program {
public static HashSet<int> FindCommonElements(HashSet<int> set1, HashSet<int> set2) {
// Escribe tu código aquí
return null;
}
static void Main(string[] args) {
// Lee la primera línea para el primer conjunto
string line1 = Console.ReadLine();
HashSet<int> set1 = new HashSet<int>();
// Comprueba si el primer conjunto está en formato de arreglo JSON
if (line1 != null && line1.StartsWith("[") && line1.EndsWith("]")) {
try {
// Extrae el contenido entre corchetes
string arrayContent = line1.Substring(1, line1.Length - 2);
// Intenta analizar el contenido del arreglo JSON
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values) {
// Elimina las comillas si las hay
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// Convierte a entero y añádelo al conjunto
if (int.TryParse(cleanValue, out int num)) {
set1.Add(num);
}
}
}
catch (Exception ex) {
Console.WriteLine($"Error parsing first set: {ex.Message}");
return;
}
}
else {
// Procesa la entrada tradicional separada por espacios para el primer conjunto
string[] input1 = line1.Split();
foreach (string s in input1) {
if (int.TryParse(s, out int num)) {
set1.Add(num);
}
}
}
// Lee la segunda línea para el segundo conjunto
string line2 = Console.ReadLine();
HashSet<int> set2 = new HashSet<int>();
// Comprueba si el segundo conjunto está en formato de arreglo JSON
if (line2 != null && line2.StartsWith("[") && line2.EndsWith("]")) {
try {
// Extrae el contenido entre corchetes
string arrayContent = line2.Substring(1, line2.Length - 2);
// Intenta analizar el contenido del arreglo JSON
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values) {
// Elimina las comillas si las hay
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// Convierte a entero y añádelo al conjunto
if (int.TryParse(cleanValue, out int num)) {
set2.Add(num);
}
}
}
catch (Exception ex) {
Console.WriteLine($"Error parsing second set: {ex.Message}");
return;
}
}
else {
// Procesa la entrada tradicional separada por espacios para el segundo conjunto
string[] input2 = line2.Split();
foreach (string s in input2) {
if (int.TryParse(s, out int num)) {
set2.Add(num);
}
}
}
// Encuentra los elementos comunes
HashSet<int> common = FindCommonElements(set1, set2);
// Imprime el resultado (ordenado)
Console.WriteLine(string.Join(" ", common.OrderBy(x => x)));
}
}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
1Arrays multidimensionales
Conceptos básicos de arrays 2DDeclaración e inicialización de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DArrays irregularesOperaciones comunes con matricesRepaso: arrays multidimensionales4Técnicas de control de flujo
Retornos anticipadosCláusulas de guardaSentencias de salto (goto)Break y ContinueAplanar condicionales anidados7Operadores lógicos avanzados
Evaluación de cortocircuitoOperadores lógicos condicionalesPrecedencia de operadoresRepaso: operadores avanzados2Toma de decisiones avanzada
Múltiples condicionesLógica booleana complejaComparación entre If y SwitchSentencias Switch anidadasRepaso: decisiones avanzadas5Manejo de excepciones
Fundamentos de Try-CatchTipos de excepcionesMúltiples bloques CatchTrabajo con archivosBloque FinallyUso de Using frente a Try-FinallyExcepciones personalizadasRepaso: manejo de errores3Mejoras de bucles
Rendimiento de buclesIteración de estructuras complejasCada tipo de bucleRefactorización de buclesRepaso: bucles optimizados6Manejo de valores nulos
Conceptos básicos de referencias nulasTipos de valor anulablesPatrones de comprobación de valores nulosProgramación defensivaRepaso: seguridad frente a valores nulos9HashMap Parte 1
¿Qué es un HashMap?Declarar un HashMapComprobar si existe una claveAcceder a los valoresModificar diccionariosRepaso - HashMap12HashSet, parte 2
Matemáticas - Unión de HashSetsMatemáticas - Intersección de HashSetMatemáticas - Diferencia de conjuntosMatemáticas - Diferencia simétricaIteración sobre conjuntosPractica por tu cuenta: Compilador de C# online