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

วิธีการใช้ Ruby Select Method (พร้อมตัวอย่าง)

คุณสามารถใช้เมธอด select ใน Ruby เพื่อกรองอาร์เรย์ของอ็อบเจ็กต์ได้

ตัวอย่างเช่น คุณสามารถค้นหาทั้งหมด เลขคู่ในรายการ

ไม่มี select ที่มีลักษณะดังนี้:

even_numbers = []

[1,2,3,4,5,6].each do |n|
  if n.even?
    even_numbers << n
  end
end

even_numbers

เป็นโค้ดที่ค่อนข้างง่ายสำหรับบางอย่าง!

มาเรียนรู้การใช้ select . กันเถอะ .

เลือกตัวอย่างวิธีการ

การใช้ select จำเป็นต้องมีการบล็อก

ภายในบล็อกคุณต้องส่งคืนสิ่งที่ประเมินเป็น true หรือ false และ select จะใช้สิ่งนั้นเพื่อกรองอาร์เรย์ของคุณ

คุณสามารถเรียนรู้เกี่ยวกับค่าบูลีนใน Ruby ได้โดยการอ่านบทความนี้

นี่คือตัวอย่าง :

[1,2,3,4,5,6].select { |n| n.even? }

สิ่งนี้จะทำในสิ่งเดียวกับตัวอย่างแรกในบทนำ แต่มีโค้ดน้อยกว่ามาก

อันที่จริง เราสามารถลดสิ่งนี้ได้มากกว่านี้อีก

ถูกใจสิ่งนี้ :

[1,2,3,4,5,6].select(&:even?)

ช็อตคัทประเภทนี้ใช้ได้เฉพาะเมื่อคุณต้องเรียกใช้เมธอดโดยตรงในทุกองค์ประกอบของอาร์เรย์

อีกอย่าง คุณยังสามารถใช้ select . ได้ ด้วยแฮช

ตัวอย่าง :

stock = {
  apples: 10,
  oranges: 5,
  bananas: 1
}

stock.select { |k, v| v > 1 }

# {:apples=>10, :oranges=>5}

โดยที่ k แสดงถึงคีย์ &v แสดงถึงค่า

ฉันกำลังพูด :

"จงหาผลไม้ที่มีสต็อกมากกว่า 1 อันมาให้ข้า"

การรวม Select เข้ากับวิธีการอื่นๆ

คุณสามารถรวมเมธอด select กับเมธอด Enumerable อื่นได้

ที่โดดเด่นที่สุดคือ with_index .

ตัวอย่าง :

fruits = %w(apple orange banana)

fruits.select.with_index { |word, idx| idx.even? }

# ["apple", "banana"]

สิ่งนี้ทำให้คุณสามารถกรองโดยใช้ดัชนี แทนที่จะเป็นวัตถุ (ในกรณีนี้คือสตริง) เอง

การกรองอาร์เรย์ในตำแหน่ง

การใช้ select บนอาร์เรย์จะสร้างอาร์เรย์ใหม่เสมอ

หากคุณต้องการเปลี่ยนอาร์เรย์เดิม คุณสามารถใช้ select! วิธีการ

ตามนี้ :

fruits = %w(apple orange banana)

fruits.select! { |fruit| fruit.start_with? "a" }

# ["apple"]

วิธีการที่ลงท้ายด้วยเครื่องหมายอัศเจรีย์ (เช่น select! ) จะเปลี่ยนวัตถุแทนที่จะส่งคืนวัตถุใหม่ แต่กฎนี้ไม่ได้บังคับใช้โดยตัวภาษาเอง

มันเป็นแค่ข้อตกลงระหว่างเรา

ค้นหา vs เลือก

Select นั้นยอดเยี่ยมเมื่อคุณต้องการกรองรายการ &รับอาร์เรย์พร้อมผลลัพธ์

แต่ถ้าคุณต้องการหาวัตถุเพียงชิ้นเดียวล่ะ

คุณสามารถใช้ find วิธีการ

ถูกใจสิ่งนี้ :

letters = %w(a aa aaa aaaa)

letters.find { |l| l.size == 3 }
# "aaa"

letters.find { |l| l.size == 10 }
# nil

ค้นหาให้การจับคู่ครั้งแรกหรือ nil ถ้าหาไม่เจอ

ทำความเข้าใจวิธีค้นหาทั้งหมด

หากคุณสงสัยเกี่ยวกับ find_all และวิธีการที่เกี่ยวข้องกับ find &select ...

ง่ายมาก!

  • The find_all method เป็นนามแฝงสำหรับ select .
  • The find วิธีช่วยให้คุณค้นหาวัตถุเฉพาะหนึ่งรายการ แทนที่จะค้นหาหลายวัตถุ

Ruby 2.6 เพิ่มนามแฝงอื่นสำหรับ select :

filter

สิ่งที่ตรงกันข้ามกับการเลือกคืออะไร

คุณสามารถลบองค์ประกอบที่คุณไม่ต้องการออกแทนที่จะเลือกองค์ประกอบที่คุณทำ

เลือกได้ง่าย :

[1,2,3,4,5,6].select { |n| n != 4 }

แต่มีวิธีการที่ทำให้สิ่งต่าง ๆ ชัดเจนขึ้น

วิธีนั้นคือ reject .

ตัวอย่าง :

[1,2,3,4,5,6].reject { |n| n == 4 }

คุณไม่ได้รับประโยชน์ทางเทคนิคใด ๆ ในแง่ของประสิทธิภาพหรืออย่างอื่น แต่จะทำให้โค้ดของคุณดีขึ้น

วิธีเลือกราง

ฉันไม่ต้องการให้คุณสับสนเมื่อคุณทำงานกับโมเดล Rails และเรียนรู้ว่าคุณสามารถใช้ select ได้ ที่นั่น

ควรรู้ไว้...

selectนี้ วิธีการก็ต่างกัน!

ตัวอย่าง :

Fruit.select(:id, :name, :color)

เมื่อคุณใช้ select ด้วย ActiveRecord โมเดลที่คุณขอเฉพาะคอลัมน์จากฐานข้อมูล

เท่าที่ฉันเข้าใจ ส่วนใหญ่จะทำเพื่อเหตุผลด้านประสิทธิภาพ

หมายเหตุสุดท้ายเกี่ยวกับเรื่องนี้ :

หากคุณกำลังทำงานกับอาร์เรย์ปกติภายในแอป Rails แสดงว่าคุณกำลังใช้ select วิธีที่เรากำลังพูดถึงตลอดบทความนี้

สรุป

คุณได้เรียนรู้เกี่ยวกับการเลือก ซึ่งเป็นวิธีการที่มีประโยชน์มากที่สุดวิธีหนึ่งของ Ruby ในการทำงานกับคอลเลกชั่นของอ็อบเจ็กต์ เช่น อาร์เรย์ ช่วง และแฮช

วิธีการใช้ Ruby Select Method (พร้อมตัวอย่าง)

ตอนนี้ถึงตาคุณแล้วที่จะเปิดตัวแก้ไขและใช้งาน

ขอบคุณสำหรับการอ่าน!