Menu
CoddyTech

Filtrar con 'where'

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy. Lección 11 de 65.

Mientras que map() transforma cada elemento de una lista, a veces solo quieres conservar los elementos que cumplen con criterios específicos. El método where() te permite filtrar una lista probando cada elemento contra una condición y conservando solo aquellos que pasan la prueba.

El método where() recibe una función de prueba que devuelve true o false para cada elemento. Los elementos que devuelven true se incluyen en el resultado, mientras que aquellos que devuelven false se filtran.

List<int> scores = [45, 78, 92, 33, 67, 88];

// Filtrar para mantener solo las puntuaciones superiores a 50
var passingScores = scores.where((score) => score > 50);
print(passingScores);  // (78, 92, 67, 88)

Este enfoque de filtrado es mucho más limpio que recorrer manualmente una lista y construir una nueva colección. El método where() representa un patrón fundamental en el procesamiento de datos, permitiéndote especificar de forma declarativa qué quieres conservar en lugar de cómo extraerlo.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de seguimiento del rendimiento de los estudiantes filtrando a los estudiantes en función de sus puntuaciones en los exámenes. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre de la clase
  2. Leer múltiples entradas de números enteros que representen las puntuaciones de los exámenes de los estudiantes (la entrada terminará cuando recibas -1)
  3. Leer una entrada de número entero que represente el umbral de puntuación mínima para aprobar
  4. Usar el método where() para filtrar y mantener solo las puntuaciones que sean mayores o iguales al umbral
  5. Imprimir los resultados del filtrado en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre de la clase es "Mathematics 101", las puntuaciones son 85, 42, 78, 91, 55, 88, y el umbral es 70, tu programa debería mostrar:

Class: Mathematics 101
Original scores: [85, 42, 78, 91, 55, 88]
Minimum passing score: 70
Filtering scores >= 70
Passing scores: (85, 78, 91, 88)
Students passed: 4 out of 6
Pass rate: 66.67%

Si el nombre de la clase es "Science Lab", las puntuaciones son 45, 38, 52, y el umbral es 60, tu programa debería mostrar:

Class: Science Lab
Original scores: [45, 38, 52]
Minimum passing score: 60
Filtering scores >= 60
Passing scores: ()
Students passed: 0 out of 3
Pass rate: 0.00%

Si el nombre de la clase es "History", las puntuaciones son 95, 88, 92, y el umbral es 80, tu programa debería mostrar:

Class: History
Original scores: [95, 88, 92]
Minimum passing score: 80
Filtering scores >= 80
Passing scores: (95, 88, 92)
Students passed: 3 out of 3
Pass rate: 100.00%

Tu programa debe usar el método where() para filtrar las puntuaciones que son mayores o iguales al umbral. El resultado filtrado se mostrará en formato de paréntesis como un iterable. Calcula la tasa de aprobados como un porcentaje con exactamente 2 decimales usando la fórmula: (passing students / total students) * 100.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la clase
  String? className = stdin.readLineSync();
  
  // Leer las puntuaciones hasta que se encuentre -1
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) break;
    scores.add(score);
  }
  
  // Leer el umbral de puntuación mínima para aprobar
  int threshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Escribe tu código a continuación
  // Usa el método where() para filtrar puntuaciones >= threshold
  
  // Imprimir los resultados en el formato requerido
  print('Class: $className');
  print('Original scores: $scores');
  print('Minimum passing score: $threshold');
  print('Filtering scores >= $threshold');
  // Imprimir puntuaciones aprobadas, recuento de estudiantes aprobados y tasa de aprobación
}
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de Dart online