count, all?, any?, none?
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 24 trên 56.
Bốn phương thức Enumerable nhỏ giúp trả lời các câu hỏi về một tập hợp mà không cần viết vòng lặp.
count trả về số phần tử thỏa mãn khối lệnh:
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5 (không có khối lệnh, tổng số phần tử)all? có giá trị true khi mọi phần tử thỏa mãn khối lệnh:
[2, 4, 6].all? { |n| n.even? } # true
[2, 4, 7].all? { |n| n.even? } # falseany? trả về true khi có ít nhất một phần tử thỏa mãn:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone? trả về true khi không có phần tử nào thỏa mãn:
[1, 3, 5].none? { |n| n.even? } # trueCác phương thức này dừng sớm: any? dừng ở kết quả khớp đầu tiên, all? dừng ở trường hợp không đạt đầu tiên. Chúng ít tốn tài nguyên.
Thử thách
DễĐọc một danh sách điểm kiểm tra gồm các số nguyên, phân tách bằng dấu phẩy. Một lớp đạt yêu cầu khi:
none?không có điểm nào âm (bài kiểm tra chưa được ghi nhận)all?mọi điểm đều không quá100any?có điểm đúng bằng100(ít nhất một điểm tuyệt đối)- ít nhất 3 điểm
>= 70(dùngcount)
In chính xác một dòng:
Valid: <count> passingkhi cả bốn điều kiện đều thỏa mãn (countlà số điểm>= 70)Invalidtrong các trường hợp khác
Với đầu vào 72,80,100,65,90: có 4 điểm >= 70, không có điểm âm, mọi điểm đều <= 100, có một điểm bằng 100, nên đầu ra là Valid: 4 passing.
Với 72,80,90: có 3 điểm đạt yêu cầu nhưng không có điểm tuyệt đối, nên kết quả là Invalid.
Tự làm thử
scores = gets.chomp.split(",").map(&:to_i)
# TODO: kết hợp all?, any?, none?, count để quyết định Valid hay Invalid
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