วันนี้ คุณจะได้เรียนรู้เกี่ยวกับ 4 วิธี Enumerable ที่จะช่วยคุณตรวจสอบคำสั่งแบบมีเงื่อนไขกับอาร์เรย์ขององค์ประกอบ แฮช หรืออ็อบเจ็กต์อื่นๆ ที่มีโมดูล Enumerable
4 เมธอดนี้คืนค่า true
หรือ false
.
สารบัญ
- 1 Ruby All Method
- 2 อาร์เรย์ทั้งหมด &ว่าง
- 3 Ruby ไม่มีวิธี
- 4 Ruby วิธีใดก็ได้
- 5 Ruby One Method
- 6 ฟีเจอร์ Ruby 2.5 ใหม่
- 7 สรุป
- 7.1 ที่เกี่ยวข้อง
มาทำสิ่งนี้กันเถอะ!
ทับทิมทุกวิธี
หากคุณต้องการตรวจสอบว่าสตริงทั้งหมดภายในอาร์เรย์มีขนาดเฉพาะหรือไม่
คุณทำได้ :
def all_words_have_specific_size?(words) return false if words.empty? words.each do |str| return false unless str.size == 5 end true end words = ["bacon", "orange", "apple"] all_words_have_specific_size?(words) # false
เราตรวจสอบทุกสตริง หากขนาดไม่ใช่สิ่งที่เราต้องการ เราจะคืนค่า false
มิฉะนั้นเราจะส่งคืน true
ในตอนท้าย
โค้ดเยอะมากสำหรับอะไรแบบนี้
ลองนึกภาพว่าต้องตั้งค่านี้ทุกครั้ง คุณต้องการตรวจสอบประเภทนี้
งานเยอะ!
สิ่งเดียวที่เราสนใจคือสิ่งนี้:
str.size == 5
นั่นคือสภาพที่เรากำลังตรวจสอบ .
มีวิธีที่ดีกว่าในการทำเช่นนี้หรือไม่
ใช่!
ใช้ all?
วิธีการทำงานอย่างหนักเพื่อคุณ
ตามนี้ :
strings.all? { |str| str.size == 5 }
แค่นั้นแหละ.
อาร์เรย์ทั้งหมด &ว่าง
สิ่งหนึ่งที่คุณต้องรู้:
นี่ all?
เมธอดจะคืนค่า true
ถ้าคุณเรียกมันว่าอาร์เรย์ว่าง
ตัวอย่าง :
[].all? { |s| s.size == 1 } # true
คำอธิบาย :
เนื่องจากไม่มีองค์ประกอบใด false
ดังนั้นองค์ประกอบทั้งหมดจะต้อง true
.
นั่นคือเหตุผลเบื้องหลังสิ่งนี้
วิธี Ruby ไม่มี
หากคุณต้องการย้อนกลับของ all?
, ใช้ none?
นี่คือตัวอย่าง :
strings.none? { |str| str.size == 5 }
ส่งคืน true
หากไม่มีสตริงที่ตรงกับเงื่อนไข หรือ false
หากมีอย่างน้อยหนึ่งรายการตรงกัน
มันเหมือนกับว่าถ้าไม่มีคำสั่ง
ทับทิมทุกวิธี
คุณต้องการที่จะรู้ว่าองค์ประกอบใดที่ตรงกับเงื่อนไขของคุณ?
คุณสามารถใช้ any?
วิธีการ!
ถูกใจสิ่งนี้ :
[1,2,3,4,5].any? # true
ในตัวอย่างนี้ any?
ทำงานเหมือนผกผันของ empty?
. แต่นั่นใช้ไม่ได้กับทุกสถานการณ์
เพราะนี่คือการถามคำถาม :
“มีองค์ประกอบ TRUTHY ในอาร์เรย์นี้หรือไม่”
หากอาร์เรย์ของคุณมีเฉพาะข้อมูลที่ไม่จริงเท่านั้น (nil
/false
) ค่าที่คุณจะได้รับ false
แต่อาร์เรย์ไม่ว่างจริงๆ
ตัวอย่าง :
[nil].any? # false
คุณยังสามารถส่งการบล็อกไปยังวิธีนี้:
[1,2,3].any? { |n| n > 0 } # true
สิ่งนี้จะตรวจสอบว่า n > 0
คือ true
อย่างน้อยหนึ่งองค์ประกอบ
รูบี้วันเมธอด
คุณสามารถตรวจสอบว่าองค์ประกอบหนึ่งส่งคืน true
ด้วย one?
วิธีการ
นี่คือตัวอย่าง :
["a", 1, {}].one? { |obj| obj.kind_of?(Hash) } # true
คุณสามารถใช้สิ่งนี้โดยไม่มีการบล็อกเพื่อตรวจสอบว่าอาร์เรย์มีค่าความจริงเพียงค่าเดียวหรือไม่ (อะไรก็ได้ยกเว้น false
/ nil
)
["a"].one? # true [].one? # false [nil].one? # false
ผมจะติด size == 1
เพราะมันชัดเจนกว่า ทุกคนจะเข้าใจว่าถึงแม้จะไม่คุ้นเคยกับ one?
ซึ่งไม่ธรรมดา
ฟีเจอร์ Ruby 2.5 ใหม่
เนื่องจาก Ruby 2.5 4 วิธีเหล่านี้ (any?
/ all?
/ none?
/ one?
) รับอาร์กิวเมนต์ที่ทำงานเหมือนอาร์กิวเมนต์ของ grep ด้วย
นี่คือสิ่งที่ฉันหมายถึง :
[:orange, :apple, :coconut].any?(Symbol) # true [1,2,3].all?(1..10) # true
นี่เป็นทางลัดเล็กๆ น้อยๆ ที่ดีหากคุณต้องการตรวจสอบคลาส นิพจน์ทั่วไป หรือช่วง
สรุป
คุณได้เรียนรู้เกี่ยวกับ 4 วิธีที่ยอดเยี่ยมของ Ruby ที่สามารถช่วยคุณประหยัดเวลาได้มาก! เมธอดเหล่านี้จะคืนค่า true
. อย่างใดอย่างหนึ่งเท่านั้น หรือ false
.
หากคุณไม่เคยใช้วิธีเหล่านี้มาก่อน… ทำไมไม่ลองใช้ตอนนี้ล่ะ
โปรดแบ่งปันบทความนี้หากคุณพบว่ามีประโยชน์