Buscando em uma Lista: indexOf
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 6 de 65.
Quando você precisa encontrar onde um elemento específico está localizado em uma lista, o Dart fornece o método indexOf(). Este método pesquisa na lista e retorna a posição do índice da primeira ocorrência do elemento que você está procurando.
O método indexOf() recebe o elemento que você deseja encontrar como seu parâmetro e retorna um número inteiro. Se o elemento existir na lista, ele retorna a posição do índice (começando em 0). Se o elemento não for encontrado, ele retorna -1.
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (primeira ocorrência)
int grapeIndex = fruits.indexOf('grape'); // -1 (não encontrado)Este método é particularmente útil quando você precisa saber a posição de um item antes de realizar operações como inserção ou remoção em locais específicos. Lembre-se de que o indexOf() encontra apenas a primeira correspondência, portanto, se um elemento aparecer várias vezes, você obterá o índice de sua primeira ocorrência.
Desafio
FácilCrie um programa que gerencie um sistema de busca de livros de uma biblioteca, encontrando a localização de livros específicos nas prateleiras. Seu programa deve:
- Ler uma entrada de string representando o nome da seção da biblioteca
- Ler múltiplas entradas de string representando os títulos dos livros na prateleira (a entrada terminará quando você receber uma string vazia)
- Ler uma entrada de string representando o título do livro a ser pesquisado
- Usar o método
indexOf()para encontrar a posição do livro solicitado - Imprimir os resultados da busca no formato exato mostrado abaixo
Por exemplo, se a seção da biblioteca for "Science Fiction", os livros forem "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game", e o livro de busca for "Foundation", seu programa deve exibir:
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 a seção da biblioteca for "Mystery", os livros forem "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon", e o livro de busca for "Gone Girl", seu programa deve exibir:
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 availableSeu programa deve usar o método indexOf() para pesquisar o livro. Quando o livro for encontrado (posição >= 0), exiba "Book located successfully". Quando o livro não for encontrado (posição = -1), exiba "Book not available". Lembre-se de que o indexOf() retorna a posição da primeira ocorrência caso o livro apareça várias vezes.
Folha de consulta
Use indexOf() para encontrar a posição de um elemento em uma lista:
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (primeira ocorrência)
int grapeIndex = fruits.indexOf('grape'); // -1 (não encontrado)O método retorna a posição do índice (começando em 0) se for encontrado, ou -1 se o elemento não existir. Ele encontra apenas a primeira ocorrência de elementos duplicados.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome da seção da biblioteca
String? section = stdin.readLineSync();
// Ler os títulos dos livros até encontrar uma string vazia
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// Ler o livro a ser pesquisado
String? searchBook = stdin.readLineSync();
// TODO: Escreva seu código abaixo
// Use o método indexOf() para encontrar a posição do livro
// Imprimir os resultados no formato exigido
print('Library Section: $section');
print('Books on shelf: $books');
print('Searching for: $searchBook');
// Imprimir a posição e o status com base nos resultados da sua pesquisa
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos