Поиск в списке: 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() находит только первое совпадение, поэтому, если элемент встречается несколько раз, вы получите индекс его первого вхождения.
Задание
ЛегкоСоздайте программу, которая управляет системой поиска библиотечных книг, находя местоположение конкретных книг на полках. Ваша программа должна:
- Считать строковый ввод, представляющий название раздела библиотеки
- Считать несколько строковых вводов, представляющих названия книг на полке (ввод закончится, когда вы получите пустую строку)
- Считать строковый ввод, представляющий название книги для поиска
- Использовать метод
indexOf(), чтобы найти позицию искомой книги - Вывести результаты поиска в точном формате, показанном ниже
Например, если раздел библиотеки — "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');
// Вывести позицию и статус на основе результатов поиска
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей