Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie 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:

  1. Ler uma entrada de string representando o nome da seção da biblioteca
  2. Ler múltiplas entradas de string representando os títulos dos livros na prateleira (a entrada terminará quando você receber uma string vazia)
  3. Ler uma entrada de string representando o título do livro a ser pesquisado
  4. Usar o método indexOf() para encontrar a posição do livro solicitado
  5. 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 successfully

Se 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 available

Seu 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
}
quiz iconTeste seus conhecimentos

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