Menu
CoddyTech

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"]
challenge icon

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:

  1. Các số lớn hơn 10 (dùng select), được nối bằng ,
  2. Các số không chia hết cho 3 (dùng reject), được nối bằng ,

Với đầu vào 3,7,12,15,20, đầu ra là:

12, 15, 20
7, 20

Tự 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 ", "
quiz iconTự kiểm tra

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ý

Tự luyện tập: Trình biên dịch Ruby online