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é.
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, CODDYTự làm thử
words = gets.chomp.split(",")
# TODO: nối các phương thức select + map(&:upcase) + join
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