Ricerca in una lista: indexOf
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 6 di 65.
Quando devi trovare dove si trova un elemento specifico in una lista, Dart mette a disposizione il metodo indexOf(). Questo metodo cerca nella lista e restituisce l'indice della prima occorrenza dell'elemento che stai cercando.
Il metodo indexOf() prende come parametro l'elemento che vuoi trovare e restituisce un intero. Se l'elemento esiste nella lista, restituisce la posizione dell'indice (a partire da 0). Se l'elemento non viene trovato, restituisce -1.
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (prima occorrenza)
int grapeIndex = fruits.indexOf('grape'); // -1 (non trovato)Questo metodo è particolarmente utile quando devi conoscere la posizione di un elemento prima di eseguire operazioni come l’inserimento o la rimozione in posizioni specifiche. Ricorda che indexOf() trova solo la prima corrispondenza, quindi se un elemento appare più volte, otterrai l’indice della sua prima occorrenza.
Sfida
FacileCrea un programma che gestisca un sistema di ricerca di libri in biblioteca individuando la posizione di libri specifici sugli scaffali. Il tuo programma deve:
- Leggere un input di tipo stringa che rappresenti il nome della sezione della biblioteca
- Leggere più input di tipo stringa che rappresentino i titoli dei libri sullo scaffale (l’input terminerà quando riceverai una stringa vuota)
- Leggere un input di tipo stringa che rappresenti il titolo del libro da cercare
- Usare il metodo
indexOf()per trovare la posizione del libro richiesto - Stampare i risultati della ricerca nel formato esatto mostrato di seguito
Per esempio, se la sezione della biblioteca è "Science Fiction", i libri sono "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game" e il libro da cercare è "Foundation", il programma dovrebbe produrre:
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 successfullySe la sezione della biblioteca è "Mystery", i libri sono "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon" e il libro da cercare è "Gone Girl", il programma dovrebbe produrre:
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 availableIl tuo programma deve usare il metodo indexOf() per cercare il libro. Quando il libro viene trovato (position >= 0), visualizza "Book located successfully". Quando il libro non viene trovato (position = -1), visualizza "Book not available". Ricorda che indexOf() restituisce la posizione della prima occorrenza se il libro appare più volte.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome della sezione della biblioteca
String? section = stdin.readLineSync();
// Leggi i titoli dei libri fino a una stringa vuota
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// Leggi il titolo del libro da cercare
String? searchBook = stdin.readLineSync();
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo indexOf() per trovare la posizione del libro
// Stampa i risultati nel formato richiesto
print('Library Section: $section');
print('Books on shelf: $books');
print('Searching for: $searchBook');
// Stampa la posizione e lo stato in base ai risultati della ricerca
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online