Xóa khỏi danh sách: removeWhere
Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 5 trên 65.
Đôi khi, bạn cần xóa nhiều phần tử khỏi danh sách dựa trên một điều kiện cụ thể. Thay vì xóa từng phần tử một, Dart cung cấp phương thức removeWhere(), giúp xóa tất cả phần tử thỏa mãn điều kiện kiểm tra trong một thao tác.
Phương thức removeWhere() nhận một hàm kiểm tra làm tham số. Hàm này nhận từng phần tử trong danh sách và trả về true nếu cần xóa phần tử đó, hoặc false nếu cần giữ lại. Sau đó, phương thức xóa tất cả phần tử mà hàm kiểm tra trả về true.
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];
// Xóa tất cả số chẵn
numbers.removeWhere((number) => number % 2 == 0);
print(numbers); // [1, 3, 5, 7]Cách này hiệu quả hơn nhiều so với việc tìm và xóa từng phần tử theo cách thủ công. Phương thức removeWhere() sửa đổi trực tiếp danh sách ban đầu, nên đây là một công cụ hữu ích để dọn dẹp danh sách dựa trên bất kỳ điều kiện nào bạn có thể biểu diễn bằng một phép kiểm tra Boolean.
Thử thách
DễTạo chương trình quản lý hệ thống lọc điểm học sinh bằng cách xóa những học sinh không đạt khỏi danh sách lớp. Chương trình của bạn cần:
- Đọc một chuỗi đầu vào biểu thị tên lớp
- Đọc nhiều số nguyên biểu thị điểm của học sinh (đầu vào kết thúc khi bạn nhận được
-1) - Dùng phương thức
removeWhere()để xóa tất cả điểm dưới 60 (điểm không đạt) - In kết quả lọc điểm theo đúng định dạng bên dưới
Ví dụ, nếu tên lớp là "Mathematics 101" và các điểm lần lượt là 85, 45, 92, 38, 76, 55, 88, chương trình của bạn sẽ in ra:
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: 3Nếu tên lớp là "History 201" và tất cả điểm đều đạt: 75, 82, 91, chương trình của bạn sẽ in ra:
Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0Nếu tên lớp là "Chemistry 301" và tất cả điểm đều không đạt: 45, 32, 58, chương trình của bạn sẽ in ra:
Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3Chương trình của bạn phải dùng phương thức removeWhere() với một hàm kiểm tra trả về true cho các điểm dưới 60. Phương thức này cần sửa đổi danh sách ban đầu bằng cách xóa tất cả điểm không đạt, chỉ giữ lại các điểm đạt.
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên lớp
String? className = stdin.readLineSync();
// Đọc các điểm số cho đến khi gặp -1
List<int> scores = [];
while (true) {
int score = int.parse(stdin.readLineSync()!);
if (score == -1) {
break;
}
scores.add(score);
}
// Lưu điểm số ban đầu để hiển thị
List<int> originalScores = List.from(scores);
// TODO: Viết code bên dưới
// Dùng phương thức (method) removeWhere() để xóa các điểm số dưới 60
// In ra kết quả
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}');
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online