select và reject
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 21 trên 56.
Phương thức select trả về một mảng mới chỉ chứa các phần tử mà khối lệnh trả về giá trị đúng. Đây là cách Ruby viết “lọc”.
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject là phép ngược lại, nó giữ lại mọi phần tử mà khối lệnh trả về false:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]Cả hai đều trả về một mảng mới; mảng ban đầu không thay đổi.
Khối lệnh chỉ là một vị từ (predicate), bất cứ thứ gì cho kết quả true hoặc false đều dùng được:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]Thử thách
Người mớiĐọc một danh sách số nguyên được phân tách bằng dấu phẩy. In ra hai dòng:
- Các số lớn hơn
10(dùngselect), được nối bằng, - Các số không chia hết cho
3(dùngreject), được nối bằng,
Với đầu vào 3,7,12,15,20, đầu ra là:
12, 15, 20
7, 20Tự làm thử
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: dòng 1, các số > 10, nối bằng ", "
# TODO: dòng 2, các số không chia hết cho 3, nối bằng ", "
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