Filter
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 24 trên 56.
filter nhận một closure làm vị từ và trả về một mảng mới chỉ chứa các phần tử mà closure trả về true.
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]Kết quả giữ nguyên thứ tự ban đầu. Kiểu dữ liệu của kết quả khớp với kiểu dữ liệu đầu vào, không có phép biến đổi nào xảy ra, chỉ có thao tác chọn.
filter kết hợp tự nhiên với map:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]Đọc từng chuỗi từ trên xuống dưới, giống như một quy trình xử lý. Mỗi bước tạo ra một mảng mới; không có gì thay đổi mảng ban đầu.
Thử thách
DễĐọc hai dòng đầu vào:
- Một danh sách số nguyên, phân tách bằng dấu phẩy
- Một số nguyên
min
In ra, mỗi nội dung trên một dòng riêng:
- Các số nguyên lớn hơn hẳn
min, nối với nhau bằng,(hoặc để trống nếu không có số nào thỏa mãn) - Bình phương của các số nguyên thỏa mãn, nối với nhau bằng
, - Số lượng số nguyên thỏa mãn
Dùng filter và map theo chuỗi. Đừng lặp qua dữ liệu đầu vào hai lần.
Với dòng 1 là 1,5,2,8,3,7 và dòng 2 là 4, đầu ra là:
5,8,7
25,64,49
3Tự làm thử
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO: dùng filter với điều kiện > min một lần, rồi dùng map để tính bình phương; in ra cả hai kết quả, sau đó đếm số phần 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