sorted(by:)
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 30 trên 56.
Bạn đã dùng .sorted() với các mảng chứa giá trị Comparable, chẳng hạn như số hoặc chuỗi. Khi muốn sắp xếp theo tiêu chí khác, hãy truyền vào một closure nhận hai phần tử và trả về true khi phần tử thứ nhất nên đứng trước phần tử thứ hai.
let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength) // ["hi", "hello", "banana"]Để sắp xếp theo thứ tự giảm dần, hãy đổi phép so sánh:
let down = words.sorted { $0.count > $1.count }
print(down) // ["banana", "hello", "hi"]Closure có thể so sánh bất kỳ giá trị nào được tính ra, độ dài, chữ cái cuối cùng hoặc một mục trong hash. Closure so sánh giá trị nào sẽ quyết định thứ tự sắp xếp.
min(by:) và max(by:) hoạt động giống nhau, nhưng trả về một phần tử tùy chọn duy nhất thay vì bản sao đã sắp xếp.
Thử thách
Trung bìnhĐọc một dòng đầu vào duy nhất: một danh sách các cặp name:age, cách nhau bằng dấu phẩy.
In ra ba dòng:
- Tên được sắp xếp theo độ tuổi tăng dần, nối với nhau bằng
,. Nếu tuổi bằng nhau, sắp xếp tên theo thứ tự bảng chữ cái. - Tên của người lớn tuổi nhất (dùng
max(by:)). Nếu tuổi bằng nhau, chọn người xuất hiện trước. - Tên của người trẻ tuổi nhất (dùng
min(by:)). Nếu tuổi bằng nhau, chọn người xuất hiện trước.
Với đầu vào alice:30,bob:22,cara:30,dan:18, đầu ra là:
dan,bob,alice,cara
alice
danTự làm thử
let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
let parts = pair.components(separatedBy: ":")
return (parts[0], Int(parts[1])!)
}
// TODO: sắp xếp theo tuổi tăng dần (nếu bằng tuổi thì xếp theo tên); dùng max(by:) để tìm người lớn tuổi nhất, min(by:) để tìm người nhỏ tuổi nhất
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