Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành thạo phương thức Map Ruby: Hướng dẫn thực tế với ví dụ

Map là phương thức Ruby dùng với Arrays, Hashes và Ranges.

Mục đích chính của map là TRANSFORM dữ liệu.

Ví dụ:

Cho mảng string, bạn duyệt qua mỗi string làm mọi ký tự IN HOA.

Hoặc nếu có danh sách object User…

Bạn chuyển đổi thành danh sách email, phone number, hoặc bất kỳ attribute nào định nghĩa trên class User.

Hãy xem chính xác cách làm!

Cú pháp Ruby Map

Cú pháp map trông như sau:

 array = ["a", "b", "c"]
array.map { |string| string.upcase } # ["A", "B", "C"] 

Trước tiên, bạn có mảng, nhưng cũng có thể là hash, hoặc range.

Sau đó gọi map với block.

Block là thứ trong ngoặc nhọn { ... }. Bên trong block bạn nói CÁCH transform mỗi element trong mảng. Nó về cơ bản là một function.

Sau khi gọi map xảy ra gì?

Map trả về mảng mới với kết quả.

Nó KHÔNG thay đổi mảng gốc.

Nếu muốn thay đổi mảng gốc dùng map!.

Ví dụ Ruby Map

Một số ví dụ hữu ích.

Nhân đôi số:

 array = [1,2,3]
array.map { |n| n * 2 } # [2, 4, 6] 

Chuyển string thành integer:

 array = ["11", "21", "5"]
array.map { |str| str.to_i } # [11, 21, 5] 

Chuyển giá trị hash thành symbol:

 hash = { bacon: "protein", apple: "fruit" }
hash.map { |k,v| [k, v.to_sym] }.to_h # {:bacon=>:protein, :apple=>:fruit} 

Về ví dụ hash:

Bạn thấy có hai đối số thay vì một, vì element hash gồm key và value.

Sau đó tôi trả về mảng mới với key và value đã transform.

Bước cuối convert lại thành hash.

Ruby Map vs Each

Khác biệt map và each?

Each giống phiên bản nguyên thủy hơn của map…

Nó cho bạn mỗi element để làm việc, nhưng không collect kết quả.

Each luôn trả về object gốc, không thay đổi.

Trong khi map làm điều tương tự, nhưng…

Trả về mảng mới với element đã transform.

Ví dụ:

 array.each { |n| n * 2 } # [1, 2, 3]
array.map { |n| n * 2 } # [2, 4, 6] 

Ruby Map vs Collect

Map và Collect là chính xác cùng một phương thức.

Chúng là tên khác cho cùng một thứ!

Nên dùng cái nào?

Nếu đọc open-source project bạn thấy phiên bản phổ biến nhất là map.

Dùng đó.

Cách dùng Map với Index

Nếu cần index kèm giá trị, dùng phương thức with_index.

Ví dụ:

 array = %w(a b c)
array.map.with_index { |ch, idx| [ch, idx] } # [["a", 0], ["b", 1], ["c", 2]] 

Mẹo thêm:

Bạn truyền tham số cho with_index nếu không muốn bắt đầu từ index 0.

Ruby Map Shorthand (map &)

Bạn dùng phiên bản shorthand cho map khi gọi phương thức không cần đối số.

Ví dụ:

 ["11", "21", "5"].map(&:to_i) 

Ví dụ:

 ["orange", "apple", "banana"].map(&:class) 

Cú pháp & này không giới hạn ở map, dùng được với các enumerable method khác.

Map Method Mindmap

Thành thạo phương thức Map Ruby: Hướng dẫn thực tế với ví dụ

Video hướng dẫn

Tóm tắt

Bạn đã học về phương thức map Ruby và cách dùng! Cũng học khác biệt giữa each, map và collect.

Nếu thích bài viết hãy chia sẻ với bạn bè Ruby 🙂

Cảm ơn đã đọc!