Chuyển đổi dữ liệu
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 56 trên 56.
Thử thách tổng kết: biến đổi bộ dữ liệu thành báo cáo tóm tắt. Kết hợp lọc, ánh xạ, nhóm, xử lý lỗi và định nghĩa phương thức trong một chương trình.
Thử thách
Trung bìnhCho mảng students. Mỗi mục là một hash có :id, :grades (một mảng số nguyên, có thể rỗng) và :subjects (một mảng chuỗi).
Định nghĩa một phương thức transform_dataset(students) trả về một hash có hai khóa:
:qualified_ids: mảng đã sắp xếp gồm các:idcủa học sinh có ít nhất một điểm và tất cả điểm đều lớn hơn70(dùngall?).:subject_counts: một hash ánh xạ mỗi môn học mà học sinh đủ điều kiện theo học với số học sinh đủ điều kiện theo học môn đó.
Nếu mảng :grades của một học sinh rỗng, học sinh đó không đủ điều kiện, hãy bỏ qua mà không thông báo.
Sau đó, gọi phương thức và in ra:
- Các ID đủ điều kiện được nối bằng
,, với tiền tốQualified:. Nếu không có ID nào, hãy inQualified: (none). - Mỗi môn học trên một dòng (sắp xếp theo thứ tự bảng chữ cái) theo định dạng
<subject>: <count>.
Với students mặc định, đầu ra là:
Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1Tự làm thử
students = [
{ id: "S1", grades: [85, 92, 78], subjects: ["math", "physics"] },
{ id: "S2", grades: [65, 80, 90], subjects: ["math", "biology"] },
{ id: "S3", grades: [], subjects: ["art"] },
{ id: "S4", grades: [88, 95], subjects: ["math", "biology", "history"] },
{ id: "S5", grades: [70, 75], subjects: ["chemistry"] }
]
# TODO: định nghĩa hàm transform_dataset(students), trả về { qualified_ids:, subject_counts: }
# TODO: in ra các ID đủ điều kiện và số lượng theo môn học
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 xử lý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệuTự luyện tập: Trình biên dịch Ruby online