Thử thách: Sắp xếp điểm số
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 63 trên 65.
Thử thách
DễTạo một hệ thống quản lý điểm toàn diện cho học sinh, xử lý dữ liệu học sinh từ một map, lọc những học sinh đạt yêu cầu và sắp xếp tên theo thứ tự bảng chữ cái. Thử thách này kết hợp việc duyệt map, lọc theo điều kiện, thao tác với danh sách và sắp xếp.
Bạn sẽ nhận đầu vào sau:
- Một chuỗi JSON biểu diễn map gồm tên học sinh (khóa) và điểm kiểm tra của các em (giá trị)
Chuỗi JSON sẽ có dạng như sau: {"Alice": 85, "Bob": 45, "Charlie": 92, "Diana": 58, "Eve": 76, "Frank": 39, "Grace": 88}
Nhiệm vụ của bạn là:
- Phân tích chuỗi JSON thành một Map bằng các phương thức Dart phù hợp
- Tạo một danh sách rỗng có tên
passingStudentsđể lưu tên những học sinh đạt yêu cầu - Duyệt map và thêm tên những học sinh đạt từ 60 điểm trở lên vào danh sách
passingStudents - Sắp xếp danh sách
passingStudentstheo thứ tự bảng chữ cái bằng phương thứcsort() - In tổng số học sinh đã làm bài thi theo đúng định dạng:
Total students: X - In số học sinh đạt yêu cầu theo đúng định dạng:
Students who passed: X - In số học sinh không đạt theo đúng định dạng:
Students who failed: X - In tên các học sinh đạt yêu cầu theo thứ tự bảng chữ cái, mỗi tên trên một dòng mới, theo đúng định dạng:
Passing student: [name] - Nếu không có học sinh nào đạt yêu cầu, hãy in:
No students passed the exam
Chương trình của bạn cần thể hiện cách duyệt map phù hợp, logic điều kiện để lọc dữ liệu theo ngưỡng đạt yêu cầu là 60, thao tác với danh sách và sắp xếp. Đầu ra phải khớp chính xác với định dạng đã nêu ở trên, trong đó tên học sinh đạt yêu cầu được sắp xếp theo thứ tự bảng chữ cái.
Tự làm thử
import 'dart:io';
import 'dart:convert';
void main() {
// Đọc chuỗi JSON đầu vào
String? jsonString = stdin.readLineSync();
// Phân tích chuỗi JSON thành Map
Map<String, dynamic> studentGrades = jsonDecode(jsonString!);
// Tạo danh sách rỗng để lưu các học sinh đạt yêu cầu
List<String> passingStudents = [];
// TODO: Viết code của bạn bên dưới
// 1. Duyệt qua Map và lọc các học sinh đạt từ 60 điểm trở lên
// 2. Thêm tên các học sinh đạt yêu cầu vào danh sách passingStudents
// 3. Sắp xếp danh sách passingStudents theo thứ tự bảng chữ cái
// 4. Tính và in ra các số liệu thống kê cần thiết
// 5. In ra các học sinh đạt yêu cầu theo định dạng đã chỉ định
// In ra kết quả (thay bằng phần code bạn viết)
print("Total students: ");
print("Students who passed: ");
print("Students who failed: ");
// In ra các học sinh đạt yêu cầu hoặc thông báo "No students passed the exam"
}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