Luis Fuentes
EstudianteWilliam Condori
EstudianteJozek Andrzej Hajduk Sánchez
EstudianteGiovanni Rincon Jimenez
EstudianteRafael Holzhacker
EstudianteEmmanuel Rodríguez
EstudianteHector Leopoldo Coronado Saavedra
EstudianteDaulis Gonzalez
Estudiantekolab Linkear
EstudianteEdgar Wilson Vásquez Coronado
EstudianteEmmanuel Rodríguez
EstudianteJonathan Rocha
EstudianteMario Luis Centeno Vargas
EstudianteEnrique Reyes
EstudianteEsteban Monguí Torres
EstudianteAndres Badillo
EstudianteJozek Andrzej Hajduk Sánchez
EstudianteUsando el método reduce para simplificar la suma
void main(){ Map<String, dynamic> restaurant = { "name": "Luis's chickens", "starts": [5, 4, 3, 4, 2] }; if (restaurant['starts'] != null) { restaurant['score'] = restaurant['starts'].reduce((int sum, int start) => sum + start) / restaurant['starts'].length; } print(restaurant); print(restaurant.keys); print(restaurant.values); }
Spread Operator (...)
Los 3 puntos que usamos en esta clase se llama Spread Operator y para los que gusten conocer más al respecto les comparto la documentación: https://dart.dev/guides/language/language-tour#spread-operator
Colleciones a unir:
List<String> primaryColors = ["red", "yellow", "blue"]; List<String> secondaryColors = ["purple", "green", "orange"];
Map colección anidada sacar la media para calificación estrellas restaurante
Cómo puedo acceder a un elemento de una Lista que esté adentro de un Mapa?
Lo siguiente no me lo permite (el output es null):
Map<String, dynamic> x = { 'nombre': 'Juan', 'edad': 29, 'ciudadNatal': 'Bogota', 'prueba': [1, 2, 30, 4] }; print(x['prueba'[2]]);
Hola 👋 Debes asegurarte que el tipo es una lista, ya que un elemento como dinámico no se sabe la manera de indexación. . Te comparto la solución:
final profile = { 'nombre': 'Juan', 'edad': 29, 'ciudadNatal': 'Bogota', 'prueba': [1, 2, 30, 4] }; final test = profile['prueba']; if (test is List) print(test[2]);
void main() { Map restaurante = { "nombre": "Pollos del monte", "estrellas": [5, 4, 3, 4, 2] }; print(restaurante); if(restaurante['estrellas'] == null) { print("El restaurante no tiene estrellas"); } else { List<int> estrellas = restaurante["estrellas"]; int suma = 0; for(int i = 0; i < estrellas.length; i++) { suma += estrellas[i]; } double promedio = suma / estrellas.length; restaurante.addAll({"promedio": promedio}); } print(restaurante); } ```void main() { Map restaurante = { "nombre": "Pollos del monte", "estrellas": \[5, 4, 3, 4, 2] }; print(restaurante); if(restaurante\['estrellas'] == null) { print("El restaurante no tiene estrellas"); } else { List\<int> estrellas = restaurante\["estrellas"]; int suma = 0; for(int i = 0; i < estrellas.length; i++) { suma += estrellas\[i]; } double promedio = suma / estrellas.length; restaurante.addAll({"promedio": promedio}); } print(restaurante);}
Mi Aporte
Utilizando el método forEach() para recorrer de una mejor manera una lista.
void main() { Map<String, dynamic> restaurante; restaurante = { "nombre": "Pollos del monte", "estrellas": [5, 4, 3, 4, 2] }; if (restaurante["estrellas"] != null) { List<int> estrellas = restaurante["estrellas"]; int suma = 0; estrellas.forEach((el) => suma += el); double promedio = suma / estrellas.length; restaurante.addAll({"promedio": promedio}); } }
Es una buena práctica usar una nueva variable para la unión de las 2 colecciones, así mantenemos su valor inicial de ambas para poder usarla de manera propia, quizás en otras funcionalidades.
Colección de colecciones
ℹ️ Definición Se dice que una colección de colecciones, es aquel objeto el que sus valores poseen el tipo
objectodynamic, según sea el caso.
.
Promedio de una lista
Sea un mapa de conductor que posee como atributos un nombre ( name) y calificaciones (scores), obtenga el promedio globlabl de dicho mapa.
final Map<String, dynamic> driver = { 'name': 'Frank Mendoza', 'scores': [5, 4, 3, 4, 2] }; final List<int> scores = driver['scores']; final scoresLenght = scores.length; final scoreTotal = scores.reduce((int total, int value) => total + value); final average = scoreTotal / scoresLenght; print(""" Driver: ${driver['name']} Rate Average: ⭐️ $average """);
Código de Colecciones Anidadas:
void main() { Map restaurante = { "nombre": "Pollos del Monte", "estrellas": [5, 4, 3, 4, 2] }; print(restaurante); if (restaurante["estrellas"] == null) { print("El restaurante no tiene estrellas"); } else { List<int> estrellas = restaurante["estrellas"]; int suma = 0; for (int i = 0; i < estrellas.length; i++); { suma += estrellas[i]; } double promedio = suma / estrellas.length; print(promedio); } }
Código de Unión deColecciones:
void main () { List<String> coloresPrimarios = ["amarillo", "azul", "rojo"]; List<String> coloresSecudarios = ["verde", "morado", "naranja"]; coloresSecudarios.addAll(coloresPrimarios); print (coloresSecudarios); } ````
Aplicando lo aprendido
void main() { Map<String, dynamic> restaurante = { 'nombre': 'Pollos Locos', 'estrellas': [2,4,6,8], }; int suma = 0; List<int> estrellas=[]; print(restaurante); if (restaurante['estrellas'] == null) { print("El restaurante no tiene estrellas"); } else { print("El restaurante si tiene estrellas"); estrellas = restaurante['estrellas']; print(estrellas); for (int i = 0; i < estrellas.length; i++) { suma += estrellas[i]; } double promedio = suma / estrellas.length; promedio = double.parse(promedio.toStringAsFixed(2)); print(promedio); restaurante.addAll({'promedio': promedio}); List<int> estrellas2=[1,3,5,7,9,...estrellas]; print(estrellas2); } print(restaurante); }
Les comparto mi código del restaurante:
void main() { //Coleccion de coleciones Map restaurante = { 'nombre': 'Pollos Locos', 'estrellas': [1,2,3,5,2,4] }; print(restaurante); if(restaurante['estrellas'] == null) { print('El restaurante no tiene calificaciones aún'); } else { //Guardando la lista en una variable aparte List <int> estrellas = restaurante['estrellas']; //Obteniendo el total de las estrellas final suma = estrellas.reduce((value, element) => value + element); //Obteniendo el promedio double promedio = suma / estrellas.length; //Limitando la cantidad de decimales String promFinal = promedio.toStringAsFixed(2); //añadiendo el promedio al arreglo tipo Map restaurante.addAll({'promedio': promFinal}); print(restaurante); } }
Se pueden unir dos o más colecciones mediante la implementación del spread operator así es como se le llama a los 3 puntos que se colocan antes del nombre de la lista. También existe el null-aware spread operator es muy similar, pero termina con un signo de interrogación
... List<String> joinedList=[...listA, ...?listB];
Esto es para validar si la lista a desempaquetar es un elemento nulo y de esta manera evitar errores al compilar el código.
Dejo enlace a la documentación oficial
Mi aporte:
<void main() { List<String> coloresPrimarios = [ "rojo", "amarillo", "azul" ]; List<String> coloresSecundarios = [ "morado", "verde", "naranja", //...coloresPrimarios ]; List<String> colores = [ ...coloresPrimarios, ...coloresSecundarios ]; //coloresSecundarios.addAll(coloresPrimarios); print(coloresPrimarios); print(coloresSecundarios); print(colores); }>
La colección inicial del restaurante
Map restaurant = { "name": "Pollos del Monte", "starts": [5, 4, 3, 4, 2] };