Удаление из списка: removeWhere
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 5 из 65.
Иногда вам нужно удалить несколько элементов из списка на основе определенного условия. Вместо того чтобы удалять элементы по одному, Dart предоставляет метод removeWhere(), который может удалить все элементы, соответствующие условию проверки, за одну операцию.
Метод removeWhere() принимает функцию-тест в качестве параметра. Эта функция получает каждый элемент списка и возвращает true, если элемент должен быть удален, или false, если он должен остаться. Затем метод удаляет все элементы, для которых функция-тест возвращает true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Удалить все четные числа
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Этот подход гораздо эффективнее, чем ручной поиск и удаление элементов по отдельности. Метод removeWhere() изменяет исходный список напрямую, что делает его мощным инструментом для очистки списков на основе любого условия, которое вы можете выразить в виде логической проверки.
Задание
ЛегкоСоздайте программу, которая управляет системой фильтрации оценок студентов, удаляя из списка класса тех, кто не сдал экзамен. Ваша программа должна:
- Прочитать строковый ввод, представляющий название класса
- Прочитать несколько целых чисел, представляющих баллы студентов (ввод закончится, когда вы получите
-1) - Использовать метод
removeWhere()для удаления всех баллов ниже 60 (неудовлетворительные оценки) - Вывести результаты фильтрации оценок в точном формате, показанном ниже
Например, если название класса — "Mathematics 101", а баллы — 85, 45, 92, 38, 76, 55, 88, ваша программа должна вывести:
Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3Если название класса — "History 201" и все баллы проходные: 75, 82, 91, ваша программа должна вывести:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Если название класса — "Chemistry 301" и все баллы неудовлетворительные: 45, 32, 58, ваша программа должна вывести:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Ваша программа должна использовать метод removeWhere() с функцией проверки, которая возвращает true для баллов ниже 60. Метод должен изменить исходный список, удалив все неудовлетворительные оценки и оставив только проходные баллы.
Шпаргалка
Метод removeWhere() удаляет из списка все элементы, соответствующие определенному условию. Он принимает функцию-тест, которая возвращает true для элементов, которые нужно удалить, и false для элементов, которые нужно оставить.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Удалить все четные числа
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Этот метод изменяет исходный список напрямую и является более эффективным, чем удаление элементов по одному.
Попробуйте сами
import 'dart:io';
void main() {
// Прочитать название класса
String? className = stdin.readLineSync();
// Читать баллы до тех пор, пока не встретится -1
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Сохранить исходные баллы для отображения
List<int> originalScores = List.from(scores);
// TODO: Напишите свой код ниже
// Используйте метод removeWhere(), чтобы удалить баллы ниже 60
// Вывести результаты
print('Class: $className');
print('Original scores: $originalScores');
print('Removed failing scores (below 60)');
print('Passing scores: $scores');
print('Students passed: ${scores.length}');
print('Students failed: ${originalScores.length - scores.length}');
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей