Intersección de Conjuntos
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 23 de 65.
Cuando necesites encontrar elementos que existan en ambas colecciones Set, el método intersection() proporciona la solución perfecta. Esta operación identifica los elementos comunes entre dos conjuntos, creando un nuevo conjunto que contiene solo los elementos que aparecen en ambas colecciones originales.
El método intersection() funciona comparando los elementos de dos conjuntos y devolviendo un nuevo conjunto que contiene solo los valores compartidos. Al igual que otras operaciones de conjuntos, maneja automáticamente la unicidad, por lo que cada elemento común aparece solo una vez en el resultado.
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Esta operación es particularmente útil para encontrar coincidencias en los datos, como intereses comunes entre usuarios, habilidades compartidas en equipos o criterios de coincidencia en operaciones de filtrado. La intersección te ayuda a identificar qué tienen en común dos colecciones, lo que la hace valiosa para tareas de comparación y análisis.
Desafío
FácilCrea un programa que gestione una plataforma de redes sociales encontrando conexiones mutuas entre dos usuarios. Tu programa debe:
- Leer una entrada de cadena que represente el nombre del primer usuario
- Leer múltiples entradas de cadena que representen las conexiones del primer usuario (la entrada terminará cuando recibas
"user1_done") - Leer una entrada de cadena que represente el nombre del segundo usuario
- Leer múltiples entradas de cadena que representen las conexiones del segundo usuario (la entrada terminará cuando recibas
"user2_done") - Crear dos Sets separados para almacenar las conexiones de cada usuario
- Usar el método
intersection()para encontrar conexiones mutuas entre ambos usuarios - Imprimir los resultados del análisis de conexión en el formato exacto que se muestra a continuación
Por ejemplo, si el primer usuario es "Alice" con las conexiones "Bob", "Charlie", "Diana", "Eve", y el segundo usuario es "Bob" con las conexiones "Alice", "Charlie", "Frank", "Diana", tu programa debería mostrar:
User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connectionsSi el primer usuario es "Sarah" con las conexiones "John", "Mike", "Lisa", y el segundo usuario es "Tom" con las conexiones "Emma", "David", "Kate", tu programa debería mostrar:
User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connectionsSi el primer usuario es "Emma" con las conexiones "Alex", "Jordan", "Taylor", "Morgan", y el segundo usuario es "Jordan" con las conexiones "Emma", "Taylor", "Casey", tu programa debería mostrar:
User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connectionsTu programa debe usar el método intersection() para encontrar conexiones comunes entre los dos Sets de usuarios. Determina la fuerza de la conexión basándote en el número de conexiones mutuas: "None" para 0 conexiones mutuas, "Weak" para exactamente 1 conexión mutua, y "Strong" para 2 o más conexiones mutuas. Si hay conexiones mutuas, muestra "Users have mutual connections" como estado, de lo contrario muestra "Users have no mutual connections".
Hoja de referencia
El método intersection() busca elementos comunes entre dos conjuntos, devolviendo un nuevo conjunto que contiene solo los valores compartidos:
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}Esta operación maneja automáticamente la unicidad y es útil para encontrar coincidencias en los datos, como intereses comunes, habilidades compartidas o criterios de coincidencia en operaciones de filtrado.
Pruébalo tú mismo
import 'dart:io';
void main() {
// Leer el nombre del primer usuario
String? user1Name = stdin.readLineSync();
// Leer las conexiones del primer usuario hasta "user1_done"
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// Leer el nombre del segundo usuario
String? user2Name = stdin.readLineSync();
// Leer las conexiones del segundo usuario hasta "user2_done"
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO: Escribe tu código a continuación
// Encontrar conexiones mutuas usando el método intersection()
// Determinar la fuerza de la conexión basada en el recuento de conexiones mutuas
// Generar el formato de salida requerido
// Imprimir los resultados del análisis
print("User Analysis: Finding mutual connections");
// Agrega tus declaraciones de salida aquí
}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
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única