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.
Desafío
FácilCrea 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:
- Leer una entrada de cadena que represente el nombre de la sección de la biblioteca
- 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)
- Leer una entrada de cadena que represente el título del libro a buscar
- Usar el método
indexOf()para encontrar la posición del libro solicitado - 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 successfullySi 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 availableTu 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
}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
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única