← Dart EspañolChapter 08 of 13

Colecciones

## Objetivos de Aprendizaje - Trabajar con Listas, Conjuntos y Mapas - Dominar metodos de colecciones - Usar condicionales y propagacion en colecciones - Filtrar y transformar colecciones ## Listas ### Creando Listas ```dart void main() { // Lista vacia var empty = []; // Con valores iniciales var numbers = [1, 2, 3, 4, 5]; // Lista de longitud fija var fixed = List.filled(3, 0); // Lista expandible var growable = List.empty(growable: true); growable.add(1); growable.add(2); } ``` ### Accediendo a Elementos ```dart void main() { var list = ['apple', 'banana', 'orange']; print(list[0]); // apple print(list.first); // apple print(list.last); // orange print(list.length); // 3 // Indice negativo print(list[-1]); // Error: invalido } ``` ### Modificando Listas ```dart void main() { var list = [1, 2, 3]; list.add(4); // [1, 2, 3, 4] list.addAll([5, 6]); // [1, 2, 3, 4, 5, 6] list.insert(0, 0); // [0, 1, 2, 3, 4, 5, 6] list.remove(3); // elimina el primer 3 list.removeAt(0); // elimina el primer elemento list.clear(); // [] } ``` ### Metodos de Lista ```dart void main() { var list = [3, 1, 4, 1, 5, 9, 2, 6]; // Ordenar var sorted = List.from(list)..sort(); print(sorted); // [1, 1, 2, 3, 4, 5, 6, 9] // Invertir print(list.reversed.toList()); // [6, 2, 9, 5, 1, 4, 1, 3] // Buscar print(list.indexOf(4)); // 2 print(list.lastIndexOf(1)); // 3 print(list.contains(5)); // true // Rebanar print(list.sublist(2, 5)); // [4, 1, 5] } ``` ## Conjuntos ### Creando Conjuntos ```dart void main() { // Conjunto vacio var empty = {}; // Con valores var fruits = {'apple', 'banana', 'orange'}; // De lista (duplicados removidos) var unique = {1, 2, 3, 3, 3}; // {1, 2, 3} } ``` ### Operaciones de Conjunto ```dart void main() { var a = {1, 2, 3, 4}; var b = {3, 4, 5, 6}; // Union print(a.union(b)); // {1, 2, 3, 4, 5, 6} // Interseccion print(a.intersection(b)); // {3, 4} // Diferencia print(a.difference(b)); // {1, 2} // Contiene print(a.contains(3)); // true print(a.containsAll(b)); // false } ``` ### Modificando Conjuntos ```dart void main() { var set = {1, 2, 3}; set.add(4); // {1, 2, 3, 4} set.addAll([5, 6]); // {1, 2, 3, 4, 5, 6} set.remove(2); // {1, 3, 4, 5, 6} set.removeAll({5, 6}); // {1, 3, 4} set.clear(); // {} } ``` ## Mapas ### Creando Mapas ```dart void main() { // Mapa vacio var empty = {}; // Con valores var ages = {'Alice': 30, 'Bob': 25}; // Usando constructor Map var map = Map(); map['name'] = 'Alice'; map['active'] = true; } ``` ### Accediendo a Mapas ```dart void main() { var ages = {'Alice': 30, 'Bob': 25}; print(ages['Alice']); // 30 print(ages['unknown']); // null // Con valor por defecto print(ages['unknown'] ?? 0); // 0 // Claves y valores print(ages.keys); // (Alice, Bob) print(ages.values); // (30, 25) print(ages.length); // 2 } ``` ### Modificando Mapas ```dart void main() { var map = {}; map['a'] = 1; // {a: 1} map.addAll({'b': 2, 'c': 3}); // {a: 1, b: 2, c: 3} map.remove('b'); // {a: 1, c: 3} map.clear(); // {} } ``` ### Metodos de Mapa ```dart void main() { var ages = {'Alice': 30, 'Bob': 25, 'Charlie': 35}; // Contiene print(ages.containsKey('Alice')); // true print(ages.containsValue(30)); // true // Iterar for (var entry in ages.entries) { print('${entry.key}: ${entry.value}'); } // Transformacion de mapa var names = ages.keys.where((k) => k.startsWith('C')).toList(); print(names); // [Charlie] var doubled = ages.map((k, v) => MapEntry(k, v * 2)); print(doubled); // {Alice: 60, Bob: 50, Charlie: 70} } ``` ## Condicionales en Colecciones ### Elementos If ```dart void main() { var needsLogin = true; var widgets = [ Text('Titulo'), if (needsLogin) Text('Login'), Text('Pie de pagina'), ]; } ``` ### Elementos If-Else ```dart void main() { var isPremium = false; var items = [ Text('Item 1'), if (isPremium) Text('Caracteristica Premium') else Text('Caracteristica Basica'), ]; } ``` ## Propagacion en Colecciones ### Operador de Propagacion ```dart void main() { var a = [1, 2, 3]; var b = [0, ...a, 4]; // [0, 1, 2, 3, 4] // Propagacion nula List? nullable; var c = [0, ...?nullable, 4]; // [0, 4] } ``` ### Propagacion con Mapas ```dart void main() { var defaults = {'a': 1, 'b': 2}; var overrides = {'b': 3, 'c': 4}; var combined = {...defaults, ...overrides}; print(combined); // {a: 1, b: 3, c: 4} } ``` ## For en Colecciones ```dart void main() { var items = ['a', 'b', 'c']; var widgets = [ for (var item in items) Text(item), ]; // Equivalente a: // var widgets = items.map((item) => Text(item)).toList(); } ``` ### Con Indice ```dart void main() { var items = ['a', 'b', 'c']; var numbered = [ for (var i = 0; i < items.length; i++) '${i + 1}: ${items[i]}', ]; print(numbered); // [1: a, 2: b, 3: c] } ``` ## Metodos de Colecciones ### forEach ```dart void main() { [1, 2, 3].forEach((n) => print(n)); } ``` ### map ```dart void main() { var doubled = [1, 2, 3].map((n) => n * 2).toList(); print(doubled); // [2, 4, 6] } ``` ### where ```dart void main() { var evens = [1, 2, 3, 4, 5].where((n) => n % 2 == 0).toList(); print(evens); // [2, 4] } ``` ### reduce y fold ```dart void main() { // reduce - acumula a un solo valor var sum = [1, 2, 3, 4].reduce((a, b) => a + b); print(sum); // 10 // fold - con valor inicial var product = [1, 2, 3, 4].fold(1, (a, b) => a * b); print(product); // 24 } ``` ### any y every ```dart void main() { var list = [1, 2, 3, 4, 5]; // any - al menos uno coincide print(list.any((n) => n > 4)); // true // every - todos coinciden print(list.every((n) => n > 0)); // true } ``` ### firstWhere y singleWhere ```dart void main() { var list = [1, 2, 3, 4, 5]; // firstWhere - primer elemento que coincide print(list.firstWhere((n) => n > 2)); // 3 // singleWhere - unico elemento que coincide var singles = [3].singleWhere((n) => n > 2); print(singles); // 3 } ``` ## Resumen - List: ordenada, acceso por indice, permite duplicados - Set: desordenada, elementos unicos - Map: pares clave-valor - Coleccion if/for: condicionales y bucles en linea - Propagacion: `...` y `...?` para composicion de colecciones - Metodos comunes: map, where, reduce, fold, forEach, any, every

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →