Usuwanie z listy: removeWhere
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 5 z 65.
Czasami trzeba usunąć z listy wiele elementów spełniających określony warunek. Zamiast usuwać elementy pojedynczo, możesz użyć metody removeWhere() dostępnej w Dart, która w jednej operacji usuwa wszystkie elementy spełniające warunek testowy.
Metoda removeWhere() przyjmuje funkcję testującą jako parametr. Ta funkcja otrzymuje każdy element listy i zwraca true, jeśli element powinien zostać usunięty, lub false, jeśli powinien pozostać. Następnie metoda usuwa wszystkie elementy, dla których funkcja testująca zwraca true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Usuń wszystkie liczby parzyste
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]To podejście jest znacznie wydajniejsze niż ręczne wyszukiwanie i usuwanie elementów pojedynczo. Metoda removeWhere() modyfikuje bezpośrednio oryginalną listę, dzięki czemu jest potężnym narzędziem do czyszczenia list na podstawie dowolnego warunku, który możesz wyrazić jako test logiczny.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem filtrowania ocen uczniów, usuwając z listy klasy uczniów, którzy nie zaliczyli. Program powinien:
- Odczytać ciąg znaków reprezentujący nazwę klasy
- Odczytać wiele wartości całkowitych reprezentujących wyniki uczniów (wprowadzanie danych zakończy się po otrzymaniu
-1) - Użyć metody
removeWhere(), aby usunąć wszystkie wyniki poniżej 60 (oceny niedostateczne) - Wypisać wyniki filtrowania ocen w dokładnym formacie pokazanym poniżej
Na przykład, jeśli nazwa klasy to "Mathematics 101", a wyniki to 85, 45, 92, 38, 76, 55, 88, program powinien wypisać:
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: 3Jeśli nazwa klasy to "History 201", a wszystkie wyniki są zaliczające: 75, 82, 91, program powinien wypisać:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Jeśli nazwa klasy to "Chemistry 301", a wszystkie wyniki są niezaliczające: 45, 32, 58, program powinien wypisać:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Program musi używać metody removeWhere() z funkcją testującą, która zwraca true dla wyników poniżej 60. Metoda powinna zmodyfikować oryginalną listę, usuwając wszystkie oceny niedostateczne i pozostawiając wyłącznie oceny zaliczające.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę klasy
String? className = stdin.readLineSync();
// Wczytuj wyniki, aż pojawi się -1
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Zachowaj oryginalne wyniki do wyświetlenia
List<int> originalScores = List.from(scores);
// TODO: Napisz swój kod poniżej
// Użyj metody removeWhere(), aby usunąć wyniki poniżej 60
// Wyświetl wyniki
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}');
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online