Фильтрация с помощью 'where'
Часть раздела Логика и управление потоком путешествия по Dart на Coddy. Урок 11 из 65.
В то время как map() преобразует каждый элемент в списке, иногда вам нужно оставить только те элементы, которые соответствуют определенным критериям. Метод where() позволяет фильтровать список, проверяя каждый элемент на соответствие условию и сохраняя только те, которые прошли проверку.
Метод where() принимает проверочную функцию, которая возвращает true или false для каждого элемента. Элементы, для которых возвращается true, включаются в результат, в то время как те, для которых возвращается false, отфильтровываются.
List<int> scores = [45, 78, 92, 33, 67, 88];
// Оставляем только баллы выше 50
var passingScores = scores.where((score) => score > 50);
print(passingScores); // (78, 92, 67, 88)Этот подход к фильтрации гораздо чище, чем ручной перебор списка в цикле и создание новой коллекции. Метод where() представляет собой фундаментальный паттерн обработки данных, позволяющий декларативно указать, что вы хотите сохранить, а не то, как это извлечь.
Задание
ЛегкоСоздайте программу для управления системой отслеживания успеваемости студентов путем фильтрации студентов на основе их результатов тестов. Ваша программа должна:
- Прочитать строковый ввод, представляющий название класса
- Прочитать несколько целочисленных вводов, представляющих результаты тестов студентов (ввод закончится, когда вы получите
-1) - Прочитать целочисленный ввод, представляющий минимальный порог проходного балла
- Использовать метод
where()для фильтрации и сохранения только тех баллов, которые больше или равны порогу - Вывести результаты фильтрации в точном формате, показанном ниже
Например, если название класса — "Mathematics 101", баллы — 85, 42, 78, 91, 55, 88, а порог — 70, ваша программа должна вывести:
Class: Mathematics 101
Original scores: [85, 42, 78, 91, 55, 88]
Minimum passing score: 70
Filtering scores >= 70
Passing scores: (85, 78, 91, 88)
Students passed: 4 out of 6
Pass rate: 66.67%Если название класса — "Science Lab", баллы — 45, 38, 52, а порог — 60, ваша программа должна вывести:
Class: Science Lab
Original scores: [45, 38, 52]
Minimum passing score: 60
Filtering scores >= 60
Passing scores: ()
Students passed: 0 out of 3
Pass rate: 0.00%Если название класса — "History", баллы — 95, 88, 92, а порог — 80, ваша программа должна вывести:
Class: History
Original scores: [95, 88, 92]
Minimum passing score: 80
Filtering scores >= 80
Passing scores: (95, 88, 92)
Students passed: 3 out of 3
Pass rate: 100.00%Ваша программа должна использовать метод where() для фильтрации баллов, которые больше или равны порогу. Отфильтрованный результат будет отображаться в формате круглых скобок как итерируемый объект. Рассчитайте процент успеваемости с точностью до 2 знаков после запятой по формуле: (passing students / total students) * 100.
Попробуйте сами
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);
}
// Чтение минимального порога проходного балла
int threshold = int.parse(stdin.readLineSync()!);
// TODO: Напишите свой код ниже
// Используйте метод where() для фильтрации оценок >= threshold
// Вывод результатов в требуемом формате
print('Class: $className');
print('Original scores: $scores');
print('Minimum passing score: $threshold');
print('Filtering scores >= $threshold');
// Вывод проходных баллов, количества сдавших студентов и процента успеваемости
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостейПотренируйтесь самостоятельно: Онлайн-компилятор Dart