Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um sistema de limpeza de dados removendo entradas duplicadas de respostas de uma pesquisa. Seu programa deve:

  1. Ler uma entrada de string representando o título da pesquisa
  2. Ler múltiplas entradas de string representando as respostas da pesquisa (a entrada terminará quando você receber "responses_done")
  3. Criar uma List para armazenar todas as respostas originais (incluindo duplicatas)
  4. Usar Set.from() para converter a lista em um Set, removendo automaticamente as duplicatas
  5. Usar toList() para converter o Set de volta em uma List de respostas únicas
  6. 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 successfully

Se 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 successfully

Se 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 successfully

Seu 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
}
quiz iconTeste seus conhecimentos

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