Lección 11 · 11 de 20
Conjuntos · Dart
Use los conjuntos (Set) de Dart para guardar valores sin repetir: quitar duplicados con toSet() y comparar gustos con intersection, union y difference.

Un conjunto (Set) guarda cada valor una sola vez, y se escribe entre llaves: {'dart', 'flutter', 'mobile'}. Añadir con add('dart') un valor que ya está no hace nada, por eso tags acaba con cuatro etiquetas y no con cinco.
`toSet()` convierte una lista en un conjunto y, de paso, quita los repetidos: seis visitas son solo tres ciudades distintas. Los conjuntos de Dart conservan el orden en que entró cada valor por primera vez.
`contains()` es la pregunta típica de un conjunto, y es muy rápida aunque tenga miles de elementos, porque no recorre los valores uno a uno como una lista.
Entre dos conjuntos hay operaciones de toda la vida: `intersection()` da lo que tienen en común (lo que gusta a Ana y a Ben), `union()` lo junta todo sin repetir y `difference()` da lo que solo está en el primero. `remove()` quita un valor.
Cuidado con las llaves vacías: {} es un mapa vacío (la próxima lección), no un conjunto. Para un conjunto vacío hay que dar el tipo, como en `<String>{}`.
Código · main.dart
void main() { // A set keeps each value only once, between { }. var tags = {'dart', 'flutter', 'mobile'}; tags.add('dart'); // already there: nothing changes tags.add('desktop'); print('Tags: $tags (${tags.length})'); // toSet() removes the repeated values of a list. var visits = ['Rome', 'Paris', 'Rome', 'Lisbon', 'Paris', 'Rome']; var cities = visits.toSet(); print('${visits.length} visits, ${cities.length} cities: $cities'); // contains is very quick in a set, even a big one. print('Been to Lisbon? ${cities.contains('Lisbon')}'); // Operations between two sets. var ana = {'chess', 'tennis', 'piano', 'cooking'}; var ben = {'tennis', 'football', 'cooking'}; print('Both like: ${ana.intersection(ben)}'); print('Either likes: ${ana.union(ben)}'); print('Only Ana: ${ana.difference(ben)}'); // remove takes a value out. ana.remove('piano'); print('Ana now: $ana'); // {} alone is an empty map: an empty set needs its type. var empty = <String>{}; print('Empty set: $empty, is empty? ${empty.isEmpty}');}Salida · dart run main.dart
Tags: {dart, flutter, mobile, desktop} (4)
6 visits, 3 cities: {Rome, Paris, Lisbon}
Been to Lisbon? true
Both like: {tennis, cooking}
Either likes: {chess, tennis, piano, cooking, football}
Only Ana: {chess, piano}
Ana now: {chess, tennis, cooking}
Empty set: {}, is empty? truePara recordar
- Un
Setva entre{ }y no repite valores. lista.toSet()quita los duplicados.contains()es muy rápido en un conjunto.intersection,unionydifferencecomparan conjuntos.- Un conjunto vacío se escribe
<String>{}.
Ejercicio
Cree dos conjuntos con los alumnos apuntados a música y a dibujo, y escriba quién va a las dos, quién va solo a música y cuántos alumnos distintos hay en total.