Преобразование списка в множество
Часть раздела Логика и управление потоком путешествия по 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. Рассчитайте количество удаленных дубликатов, вычтя итоговое количество уникальных ответов из исходного общего количества.
Шпаргалка
Чтобы удалить дубликаты из 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}Чтобы преобразовать Set обратно в List, используйте toList():
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]Паттерн List → 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Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей