Menu
Coddy logo textTech

Búsqueda con 'firstWhere'

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

Cuando necesites encontrar un elemento específico en una lista que cumpla con ciertos criterios, el método firstWhere() proporciona una solución eficiente. A diferencia de los métodos de filtrado que devuelven todos los elementos coincidentes, firstWhere() deja de buscar tan pronto como encuentra el primer elemento que satisface tu condición.

El método firstWhere() recibe una función de prueba que devuelve true o false para cada elemento. Examina los elementos uno por uno hasta que encuentra el primero que pasa la prueba, y luego devuelve inmediatamente ese elemento.

List<int> numbers = [1, 3, 8, 15, 22, 7];

// Encontrar el primer número par
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven);  // 8

Para situaciones en las que ningún elemento coincide con tu condición, firstWhere() proporciona un parámetro orElse opcional. Este parámetro acepta una función que devuelve un valor predeterminado cuando no se encuentra ninguna coincidencia, lo que evita que tu programa falle con un error.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de atención al cliente buscando la primera queja de un cliente que requiera atención inmediata. Tu programa debe:

  1. Leer una entrada de tipo cadena que represente el nombre del departamento
  2. Leer varias entradas de tipo entero que representen los niveles de prioridad de las quejas (la entrada terminará cuando recibas -1)
  3. Leer una entrada de tipo entero que represente el umbral de prioridad urgente
  4. Usar el método firstWhere() para encontrar la primera queja con un nivel de prioridad mayor o igual que el umbral urgente
  5. Imprimir los resultados de atención al cliente en el formato exacto que se muestra a continuación

Por ejemplo, si el nombre del departamento es "Technical Support", los niveles de prioridad son 3, 7, 2, 9, 4 y el umbral urgente es 8, tu programa debe mostrar:

Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action required

Si el nombre del departamento es "Billing Department", los niveles de prioridad son 4, 6, 3, 5 y el umbral urgente es 7, tu programa debe mostrar:

Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processing

Si el nombre del departamento es "Sales Support", los niveles de prioridad son 10, 2, 8 y el umbral urgente es 9, tu programa debe mostrar:

Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action required

Tu programa debe usar el método firstWhere() para encontrar la primera prioridad de queja que sea mayor o igual que el umbral urgente. Si no se encuentra ninguna queja urgente, muestra «No encontrada» para la primera queja urgente y muestra «No hay quejas urgentes - continúa con el procesamiento normal» como estado. Si se encuentra una queja urgente, muestra el nivel de prioridad y muestra «Se encontró una queja urgente - se requiere acción inmediata» como estado.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre del departamento
  String? department = stdin.readLineSync();
  
  // Leer los niveles de prioridad de las quejas hasta -1
  List<int> complaints = [];
  while (true) {
    int priority = int.parse(stdin.readLineSync()!);
    if (priority == -1) break;
    complaints.add(priority);
  }
  
  // Leer el umbral de urgencia
  int urgentThreshold = int.parse(stdin.readLineSync()!);
  
  // TODO: Escribe tu código a continuación
  // Usa el método firstWhere() para encontrar la primera queja >= urgentThreshold
  
  // Mostrar los resultados
  print('Department: $department');
  print('All complaints: $complaints');
  print('Urgent threshold: $urgentThreshold');
  print('Searching for first complaint >= $urgentThreshold');
  // Imprimir el resultado de la primera queja urgente
  // Imprimir mensaje de estado
}
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