Diferença de Conjuntos
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 24 de 65.
Às vezes, você precisa encontrar elementos que existem em um Set mas não em outro. O método difference() resolve isso criando um novo conjunto contendo apenas os elementos do primeiro conjunto que não estão presentes no segundo conjunto.
Pense nisso como uma subtração para conjuntos - você está removendo todos os elementos do segundo conjunto do primeiro conjunto. O método difference() retorna um novo conjunto com os elementos restantes, deixando ambos os conjuntos originais inalterados.
Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};
Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks); // {meeting, report}Esta operação é particularmente útil para encontrar o que está faltando, o que resta a fazer ou o que é exclusivo de uma coleção em comparação com outra. Ao contrário da interseção, que encontra semelhanças, a diferença destaca o que torna um conjunto distinto de outro.
Desafio
FácilCrie um programa que gerencie um sistema de gerenciamento de projetos identificando tarefas planejadas, mas ainda não concluídas. Seu programa deve:
- Ler uma entrada de texto representando o nome do projeto
- Ler várias entradas de texto representando tarefas planejadas (a entrada terminará quando você receber
"planned_done") - Ler várias entradas de texto representando tarefas concluídas (a entrada terminará quando você receber
"completed_done") - Criar dois Sets separados para armazenar as tarefas planejadas e as tarefas concluídas
- Usar o método
difference()para encontrar as tarefas que estão planejadas, mas ainda não foram concluídas - Imprimir a análise do status do projeto exatamente no formato mostrado abaixo
Por exemplo, se o nome do projeto for "Website Launch", as tarefas planejadas forem "Design mockups", "Write content", "Setup database", "Test functionality", "Deploy site", e as tarefas concluídas forem "Design mockups", "Setup database", seu programa deverá produzir:
Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remainingSe o nome do projeto for "Mobile App Development", as tarefas planejadas forem "Create wireframes", "Develop UI", "Implement features", e as tarefas concluídas forem "Create wireframes", "Develop UI", "Implement features", seu programa deverá produzir:
Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfullySe o nome do projeto for "Marketing Campaign", as tarefas planejadas forem "Research target audience", "Create content", "Design graphics", "Launch campaign", "Analyze results", e a tarefa concluída for "Research target audience", seu programa deverá produzir:
Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remainingSeu programa deve usar o método difference() para encontrar as tarefas que existem no Set de tarefas planejadas, mas não no Set de tarefas concluídas. Calcule a porcentagem de progresso dividindo o número de tarefas concluídas pelo total de tarefas planejadas e multiplicando por 100, arredondando para 1 casa decimal. Se todas as tarefas forem concluídas, mostre "Projeto concluído com sucesso" como status; caso contrário, mostre "Projeto em andamento - X tarefa(s) restante(s)", em que X é o número de tarefas restantes.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome do projeto
String? projectName = stdin.readLineSync();
// Ler tarefas planejadas até "planned_done"
Set<String> plannedTasks = <String>{};
String? task;
while ((task = stdin.readLineSync()) != "planned_done") {
if (task != null) {
plannedTasks.add(task);
}
}
// Ler tarefas concluídas até "completed_done"
Set<String> completedTasks = <String>{};
while ((task = stdin.readLineSync()) != "completed_done") {
if (task != null) {
completedTasks.add(task);
}
}
// TODO: Escreva seu código abaixo
// Use o método difference() para encontrar as tarefas restantes
// Calcular a porcentagem de progresso
// Determinar o status do projeto
// Exibir os resultados
print("Project: $projectName");
print("Planned tasks: $plannedTasks");
print("Completed tasks: $completedTasks");
// Adicione as instruções de saída 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 ÚnicosPratique por conta própria: Compilador de Dart online