Xây dựng pipeline
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 31 trên 56.
Các phương thức bạn đã học, map, filter, reduce, compactMap, flatMap, sorted(by:), là bộ công cụ Swift dùng hằng ngày. Code thực tế kết hợp chúng với nhau.
struct Order {
let item: String
let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
.filter { $0.qty > 0 }
.sorted { $0.qty > $1.qty }
.map { $0.item }
print(names) // ["milk", "apple"]Đọc chuỗi từ trên xuống dưới: giữ lại các đơn hàng không trống, sắp xếp theo số lượng giảm dần, rồi chỉ giữ lại tên.
Pipeline hoạt động hiệu quả nhất khi mỗi bước chỉ có một mục đích. Nếu bạn thấy mình đang làm hai việc cùng lúc bên trong một hàm đóng (closure), vừa ánh xạ vừa lọc, hãy tách chúng thành hai bước. Chuỗi này vẫn dễ đọc khi dài thêm.
Thử thách
Trung bìnhĐọc một dòng đầu vào: danh sách các mục name:price:qty được phân tách bằng dấu phẩy. Một số mục không đúng định dạng và cần được bỏ qua: mọi mục có giá hoặc số lượng không phải là số nguyên hợp lệ.
Tạo một quy trình xử lý để tạo một dòng cho mỗi mục hợp lệ có qty > 0, được sắp xếp theo tổng (price * qty) theo thứ tự giảm dần, với định dạng:
<name>: <total>Sau các dòng cho từng mục, in ra một dòng tổng kết: Sum: <n> kèm tổng cộng.
Với đầu vào apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7, đầu ra là:
milk: 20
salt: 14
apple: 6
Sum: 40Tự làm thử
let entries = readLine()!.components(separatedBy: ",")
// TODO: dùng chuỗi xử lý compactMap (phân tích), filter (qty > 0),
// sorted (total giảm dần), map (định dạng); in các dòng và Sum
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 thực thi
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏiTự luyện tập: Playground Swift