Remoção em Listas: removeWhere
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 5 de 65.
Às vezes, você precisa remover vários elementos de uma lista com base em uma condição específica. Em vez de remover os elementos um por um, o Dart fornece o método removeWhere(), que pode remover todos os elementos que correspondem a uma condição de teste em uma única operação.
O método removeWhere() recebe uma função de teste como seu parâmetro. Esta função recebe cada elemento na lista e retorna true se o elemento deve ser removido, ou false se ele deve permanecer. O método então remove todos os elementos para os quais a função de teste retorna true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Remove all even numbers
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Esta abordagem é muito mais eficiente do que procurar e remover elementos individualmente de forma manual. O método removeWhere() modifica a lista original diretamente, tornando-o uma ferramenta poderosa para limpar listas com base em qualquer condição que você possa expressar como um teste booleano.
Desafio
FácilCrie um programa que gerencie um sistema de filtragem de notas de alunos, removendo os alunos que reprovaram de uma lista da turma. Seu programa deve:
- Ler uma entrada de string representando o nome da turma
- Ler múltiplas entradas de inteiros representando as notas dos alunos (a entrada terminará quando você receber
-1) - Usar o método
removeWhere()para remover todas as notas que estão abaixo de 60 (notas de reprovação) - Imprimir os resultados da filtragem de notas no formato exato mostrado abaixo
Por exemplo, se o nome da turma for "Mathematics 101" e as notas forem 85, 45, 92, 38, 76, 55, 88, seu programa deve exibir:
Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3Se o nome da turma for "History 201" e todas as notas forem de aprovação: 75, 82, 91, seu programa deve exibir:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Se o nome da turma for "Chemistry 301" e todas as notas forem de reprovação: 45, 32, 58, seu programa deve exibir:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Seu programa deve usar o método removeWhere() com uma função de teste que retorna true para notas abaixo de 60. O método deve modificar a lista original removendo todas as notas de reprovação, deixando apenas as notas de aprovação.
Folha de consulta
O método removeWhere() remove todos os elementos de uma lista que correspondem a uma condição específica. Ele recebe uma função de teste que retorna true para elementos a serem removidos e false para elementos a serem mantidos.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Remove todos os números pares
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]O método modifica a lista original diretamente e é mais eficiente do que remover elementos individualmente.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome da turma
String? className = stdin.readLineSync();
// Ler as notas até que -1 seja encontrado
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Armazenar as notas originais para exibição
List<int> originalScores = List.from(scores);
// TODO: Escreva seu código abaixo
// Use o método removeWhere() para remover notas abaixo de 60
// Imprimir os resultados
print('Class: $className');
print('Original scores: $originalScores');
print('Removed failing scores (below 60)');
print('Passing scores: $scores');
print('Students passed: ${scores.length}');
print('Students failed: ${originalScores.length - scores.length}');
}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