Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Ruby Map Method: คู่มือปฏิบัติพร้อมตัวอย่าง

Map เป็นเมธอด Ruby ที่ใช้กับ Arrays, Hashes และ Ranges ได้

การใช้งานหลักของ map คือ TRANSFORM ข้อมูล

ตัวอย่าง:

กำหนดอาร์เรย์ของ strings คุณวนทุก string และทำให้ทุกตัวอักษรเป็น UPPERCASE

หรือหากคุณมีรายการออบเจกต์ User…

คุณสามารถ แปลง พวกมันเป็นรายการ email addresses, phone number หรือ attribute ใดๆ ที่นิยามบนคลาส User

มา看看รายละเอียดกัน!

Ruby Map Syntax

ไวยากรณ์ของ map 长这样:

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

ก่อนอื่นคุณมีอาร์เรย์ แตอาจเป็น hash หรือ range ก็ได้

จากนั้นเรียก map พร้อม block

Block คือสิ่งในวงเล็บ { ... } ภายใน block คุณบอกว่าอยาก transform ทุก element ในอาร์เรย์อย่างไร 基本上是 function

เกิดอะไรหลังจากเรียก map?

Map คืนอาร์เรย์ใหม่ พร้อมผลลัพธ์

มันไม่เปลี่ยนต้นฉบับ

หากอยากเปลี่ยนอาร์เรย์ต้นฉบับ ใช้ map!

ตัวอย่าง Ruby Map

นี่คือตัวอย่างที่อาจมีประโยชน์

คูณตัวเลขสองเท่า:

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

แปลง strings เป็น integers:

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

แปลง hash values เป็น symbols:

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

เกี่ยวกับตัวอย่าง hash นี้:

คุณจะพบว่ามีสองอาร์กิวเมนต์แทนหนึ่ง นั่นเพราะ hash element ประกอบด้วย key และ value

จากนั้นผมคืนอาร์เรย์ใหม่พร้อม key และ values ที่ transform แล้ว

ขั้นตอนสุดท้ายคือแปลงกลับเป็น hash

Ruby Map vs Each

ความแตกต่างระหว่าง map และ each คืออะไร?

Each เหมือน version primitive กว่าของ map…

มันให้ทุก element ให้คุณทำงาน แต่ไม่ collect results

Each คืน original object ที่ไม่เปลี่ยนแปลงเสมอ

ในขณะที่ map ทำสิ่งเดียวกัน แต…

มันคืนอาร์เรย์ใหม่พร้อม elements ที่ transform แล้ว

ตัวอย่าง:

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

Ruby Map vs Collect

Map และ Collect เป็นเมธอดเดียวกันทุกประการ

ชื่อต่างกันสำหรับสิ่งเดียวกัน!

ควรใช้ตัวไหน?

หากอ่าน open-source projects คุณจะพบว่า version ที่ common ที่สุดคือ map

ใช้ตัวนั้น

วิธีใช้ Map พร้อม Index

หากต้องการ index พร้อม values ใช้เมธอด with_index

ตัวอย่าง:

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

Bonus tip:

คุณส่งพารามิเตอร์ให้ with_index ได้ หากไม่อยากเริ่มจาก index 0

Ruby Map Shorthand (map &)

คุณใช้ shorthand version สำหรับ map ได้เมื่อเรียกเมธอดที่ ไม่ต้องการอาร์กิวเมนต์

ตัวอย่าง:

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

ตัวอย่าง:

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

Syntax & นี้ไม่จำกัดแค่ map ใช้กับ enumerable methods อื่นๆ ได้

Map Method Mindmap

เชี่ยวชาญ Ruby Map Method: คู่มือปฏิบัติพร้อมตัวอย่าง

วิดีโอสอน

สรุป

คุณเรียนรู้เกี่ยวกับ Ruby map method และวิธีใช้งานแล้ว! ยังเรียนรู้ความแตกต่างระหว่าง each, map และ collect

หากชอบบทความนี้แชร์ให้เพื่อน Ruby ของคุณ 🙂

ขอบคุณที่อ่าน!