Menu
Coddy logo textTech

Поиск в списке: indexOf

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 6 из 65.

Когда вам нужно найти, где в списке расположен конкретный элемент, Dart предоставляет метод indexOf(). Этот метод выполняет поиск по списку и возвращает индекс первого вхождения искомого элемента.

Метод indexOf() принимает элемент, который вы хотите найти, в качестве параметра и возвращает целое число. Если элемент присутствует в списке, он возвращает индекс (начиная с 0). Если элемент не найден, он возвращает -1.

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

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (первое вхождение)
int grapeIndex = fruits.indexOf('grape');    // -1 (не найдено)

Этот метод особенно полезен, когда вам нужно знать позицию элемента перед выполнением таких операций, как вставка или удаление в определенных местах. Помните, что indexOf() находит только первое совпадение, поэтому, если элемент встречается несколько раз, вы получите индекс его первого вхождения.

challenge icon

Задание

Легко

Создайте программу, которая управляет системой поиска библиотечных книг, находя местоположение конкретных книг на полках. Ваша программа должна:

  1. Считать строковый ввод, представляющий название раздела библиотеки
  2. Считать несколько строковых вводов, представляющих названия книг на полке (ввод закончится, когда вы получите пустую строку)
  3. Считать строковый ввод, представляющий название книги для поиска
  4. Использовать метод indexOf(), чтобы найти позицию искомой книги
  5. Вывести результаты поиска в точном формате, показанном ниже

Например, если раздел библиотеки — "Science Fiction", книги — "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game", а искомая книга — "Foundation", ваша программа должна вывести:

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

Если раздел библиотеки — "Mystery", книги — "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon", а искомая книга — "Gone Girl", ваша программа должна вывести:

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

Ваша программа должна использовать метод indexOf() для поиска книги. Если книга найдена (position >= 0), выведите "Book located successfully". Если книга не найдена (position = -1), выведите "Book not available". Помните, что indexOf() возвращает позицию первого вхождения, если книга встречается несколько раз.

Шпаргалка

Используйте indexOf(), чтобы найти позицию элемента в списке:

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

int appleIndex = fruits.indexOf('apple');    // 0
int bananaIndex = fruits.indexOf('banana');  // 1 (первое вхождение)
int grapeIndex = fruits.indexOf('grape');    // -1 (не найдено)

Метод возвращает индекс (начиная с 0), если элемент найден, или -1, если элемент не существует. Он находит только первое вхождение дублирующихся элементов.

Попробуйте сами

import 'dart:io';

void main() {
  // Прочитать название раздела библиотеки
  String? section = stdin.readLineSync();
  
  // Читать названия книг до пустой строки
  List<String> books = [];
  String? book;
  while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
    books.add(book);
  }
  
  // Прочитать название искомой книги
  String? searchBook = stdin.readLineSync();
  
  // TODO: Напишите свой код ниже
  // Используйте метод indexOf(), чтобы найти позицию книги
  
  // Вывести результаты в требуемом формате
  print('Library Section: $section');
  print('Books on shelf: $books');
  print('Searching for: $searchBook');
  // Вывести позицию и статус на основе результатов поиска
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком