Convertendo uma Lista para um Conjunto
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 21 de 65.
Uma das aplicações mais práticas do Set é a remoção de elementos duplicados de uma List. Como os conjuntos eliminam duplicatas automaticamente, você pode facilmente converter uma lista com valores repetidos em uma coleção de elementos únicos.
Para converter uma List em um Set, você simplesmente passa a lista para o construtor Set.from(). Isso cria um novo conjunto contendo todos os elementos únicos da lista original.
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}Se você precisar do resultado de volta como uma List (talvez para manter a compatibilidade com outras partes do seu código), você pode converter o conjunto de volta para uma lista usando toList(). Isso fornece uma lista contendo apenas os elementos únicos da original.
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]Este padrão de List → Set → List é extremamente comum quando você precisa limpar dados removendo duplicatas enquanto preserva a estrutura de lista para processamento posterior.
Desafio
FácilCrie um programa que gerencie um sistema de limpeza de dados removendo entradas duplicadas de respostas de uma pesquisa. Seu programa deve:
- Ler uma entrada de string representando o título da pesquisa
- Ler múltiplas entradas de string representando as respostas da pesquisa (a entrada terminará quando você receber
"responses_done") - Criar uma List para armazenar todas as respostas originais (incluindo duplicatas)
- Usar
Set.from()para converter a lista em um Set, removendo automaticamente as duplicatas - Usar
toList()para converter o Set de volta em uma List de respostas únicas - Imprimir os resultados da limpeza de dados no formato exato mostrado abaixo
Por exemplo, se o título da pesquisa for "Customer Satisfaction Survey" e as respostas forem "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor", seu programa deve exibir:
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 successfullySe o título da pesquisa for "Product Feedback" e as respostas forem "Like", "Dislike", "Like", "Like", seu programa deve exibir:
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 successfullySe o título da pesquisa for "Event Rating" e as respostas forem "Amazing", "Okay", "Great", seu programa deve exibir:
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 successfullySeu programa deve demonstrar o padrão completo List → Set → List. Primeiro armazene todas as respostas em uma List, depois use Set.from() para criar um Set a partir da List e, finalmente, use toList() para converter o Set de volta para uma List. Calcule o número de duplicatas removidas subtraindo a contagem única final da contagem total original.
Folha de consulta
Para remover duplicatas de uma List, converta-a em um Set usando 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}Para converter um Set de volta para uma List, use toList():
List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList); // [1, 2, 3, 4, 5]O padrão List → Set → List é comumente usado para limpeza de dados enquanto preserva a estrutura da lista.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o título da pesquisa
String? surveyTitle = stdin.readLineSync();
// Ler as respostas da pesquisa até "responses_done"
List<String> originalResponses = [];
String? response;
while ((response = stdin.readLineSync()) != "responses_done") {
if (response != null) {
originalResponses.add(response);
}
}
// TODO: Escreva seu código abaixo
// 1. Use Set.from() para converter a lista em um Set (remove duplicatas)
// 2. Use toList() para converter o Set de volta para uma Lista
// 3. Calcule as duplicatas removidas e as contagens finais
// Imprimir os resultados no formato exigido
print("Survey: $surveyTitle");
print("Original responses: $originalResponses");
// Adicione as instruções de impressão restantes aqui
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos