Menu
Coddy logo textTech

Búsqueda en una lista: indexOf

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 6 de 65.

Cuando necesites encontrar dónde se encuentra un elemento específico en una lista, Dart proporciona el método indexOf(). Este método busca a través de la lista y devuelve la posición del índice de la primera aparición del elemento que estás buscando.

El método indexOf() toma el elemento que deseas encontrar como su parámetro y devuelve un entero. Si el elemento existe en la lista, devuelve la posición del índice (comenzando desde 0). Si no se encuentra el elemento, devuelve -1.

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (primera aparición)
int grapeIndex = fruits.indexOf('grape');    // -1 (no encontrado)

Este método es particularmente útil cuando necesitas conocer la posición de un elemento antes de realizar operaciones como la inserción o eliminación en ubicaciones específicas. Recuerda que indexOf() solo encuentra la primera coincidencia, por lo que si un elemento aparece varias veces, obtendrás el índice de su primera aparición.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de búsqueda de libros de una biblioteca encontrando la ubicación de libros específicos en los estantes. Tu programa debe:

  1. Leer una entrada de cadena que represente el nombre de la sección de la biblioteca
  2. Leer múltiples entradas de cadena que representen los títulos de los libros en el estante (la entrada terminará cuando recibas una cadena vacía)
  3. Leer una entrada de cadena que represente el título del libro a buscar
  4. Usar el método indexOf() para encontrar la posición del libro solicitado
  5. Imprimir los resultados de la búsqueda en el formato exacto que se muestra a continuación

Por ejemplo, si la sección de la biblioteca es "Science Fiction", los libros son "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game", y el libro a buscar es "Foundation", tu programa debería mostrar:

Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfully

Si la sección de la biblioteca es "Mystery", los libros son "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon", y el libro a buscar es "Gone Girl", tu programa debería mostrar:

Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not available

Tu programa debe usar el método indexOf() para buscar el libro. Cuando se encuentre el libro (posición >= 0), muestra "Book located successfully". Cuando no se encuentre el libro (posición = -1), muestra "Book not available". Recuerda que indexOf() devuelve la posición de la primera ocurrencia si el libro aparece varias veces.

Hoja de referencia

Utiliza indexOf() para encontrar la posición de un elemento en una lista:

List<String> fruits = ['apple', 'banana', 'orange', 'banana'];

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (primera aparición)
int grapeIndex = fruits.indexOf('grape');    // -1 (no encontrado)

El método devuelve la posición del índice (comenzando desde 0) si se encuentra, o -1 si el elemento no existe. Solo encuentra la primera aparición de elementos duplicados.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la sección de la biblioteca
  String? section = stdin.readLineSync();
  
  // Leer títulos de libros hasta encontrar una cadena vacía
  List<String> books = [];
  String? book;
  while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
    books.add(book);
  }
  
  // Leer el libro a buscar
  String? searchBook = stdin.readLineSync();
  
  // TODO: Escribe tu código a continuación
  // Usa el método indexOf() para encontrar la posición del libro
  
  // Imprimir los resultados en el formato requerido
  print('Library Section: $section');
  print('Books on shelf: $books');
  print('Searching for: $searchBook');
  // Imprimir la posición y el estado basado en los resultados de tu búsqueda
}
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