Menu
CoddyTech

Nối chuỗi map

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 22 trên 56.

Bạn đã gặp map trong phần kiến thức cơ bản. Nó tạo mảng mới bằng cách biến đổi từng phần tử. Sức mạnh thực sự của nó thể hiện khi bạn kết hợp nó với select, reject và các hàm tương tự.

Mỗi phương thức trả về một mảng, vì vậy gọi thêm một phương thức trên kết quả sẽ tiếp tục chuỗi thao tác:

numbers = [1, 2, 3, 4, 5]
result = numbers
  .select { |n| n.odd? }
  .map    { |n| n * 10 }
puts result.inspect   # [10, 30, 50]

Đọc chuỗi từ trên xuống dưới: bắt đầu bằng các số, giữ lại số lẻ, nhân mỗi số với 10. Không dùng biến tạm, không dùng vòng lặp.

Cú pháp rút gọn &:method_name dùng được khi khối lệnh chỉ gọi một phương thức:

["hi", "yo"].map { |s| s.upcase }   # ["HI", "YO"]
["hi", "yo"].map(&:upcase)         # ["HI", "YO"]  (giống nhau)

Cách viết tắt này xuất hiện ở khắp nơi trong code Ruby. Hãy nhận ra nó khi bạn thấy nhé.

challenge icon

Thử thách

Dễ

Đọc một danh sách từ được phân tách bằng dấu phẩy. In trên một dòng các từ dài hơn 3 ký tự, viết hoa và nối với nhau bằng , .

Viết thành một chuỗi lệnh: select các từ dài, map chúng bằng &:upcase, rồi join.

Với đầu vào hi,hello,yo,coddy,sup, đầu ra là:

HELLO, CODDY

Tự làm thử

words = gets.chomp.split(",")

# TODO: nối các phương thức select + map(&:upcase) + join
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