Преобразование списка в множество
Часть раздела Логика и управление потоком путешествия по Dart на Coddy. Урок 21 из 65.
Одним из наиболее практичных применений Set является удаление дубликатов из List. Поскольку наборы автоматически исключают дубликаты, вы можете легко преобразовать список с повторяющимися значениями в коллекцию уникальных элементов.
Чтобы преобразовать List в Set, вы просто передаете список в конструктор Set.from(). Это создает новый набор, содержащий все уникальные элементы из исходного списка.
List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers); // {1, 2, 3, 4, 5}Если вам нужно получить результат обратно в виде List (возможно, для обеспечения совместимости с другими частями вашего кода), вы можете преобразовать набор обратно в список с помощью toList(). Это даст вам список, содержащий только уникальные элементы из оригинала.
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]Этот паттерн List → Set → List чрезвычайно распространен, когда вам нужно очистить данные, удалив дубликаты и сохранив при этом структуру списка для дальнейшей обработки.
Задание
ЛегкоСоздайте программу, которая управляет системой очистки данных, удаляя дубликаты из ответов опроса. Ваша программа должна:
- Прочитать строковый ввод, представляющий название опроса
- Прочитать несколько строковых вводов, представляющих ответы опроса (ввод закончится, когда вы получите
"responses_done") - Создать List для хранения всех исходных ответов (включая дубликаты)
- Использовать
Set.from()для преобразования списка в Set, что автоматически удалит дубликаты - Использовать
toList()для преобразования Set обратно в List уникальных ответов - Вывести результаты очистки данных в точном формате, показанном ниже
Например, если название опроса — "Customer Satisfaction Survey", а ответы — "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor", ваша программа должна вывести:
Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfullyЕсли название опроса — "Product Feedback", а ответы — "Like", "Dislike", "Like", "Like", ваша программа должна вывести:
Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfullyЕсли название опроса — "Event Rating", а ответы — "Amazing", "Okay", "Great", ваша программа должна вывести:
Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfullyВаша программа должна демонстрировать полный паттерн List → Set → List. Сначала сохраните все ответы в List, затем используйте Set.from() для создания Set из List, и, наконец, используйте toList() для преобразования Set обратно в List. Рассчитайте количество удаленных дубликатов, вычтя итоговое количество уникальных ответов из исходного общего количества.
Попробуйте сами
import 'dart:io';
void main() {
// Чтение заголовка опроса
String? surveyTitle = stdin.readLineSync();
// Чтение ответов опроса до тех пор, пока не встретится "responses_done"
List<String> originalResponses = [];
String? response;
while ((response = stdin.readLineSync()) != "responses_done") {
if (response != null) {
originalResponses.add(response);
}
}
// TODO: Напишите свой код ниже
// 1. Используйте Set.from() для преобразования списка в Set (удаляет дубликаты)
// 2. Используйте toList() для преобразования Set обратно в List
// 3. Рассчитайте количество удаленных дубликатов и итоговое количество
// Вывод результатов в требуемом формате
print("Survey: $surveyTitle");
print("Original responses: $originalResponses");
// Добавьте остальные операторы вывода здесь
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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