วันนี้ คุณจะได้เรียนรู้เกี่ยวกับ 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 .
หากคุณไม่เคยใช้วิธีเหล่านี้มาก่อน… ทำไมไม่ลองใช้ตอนนี้ล่ะ
โปรดแบ่งปันบทความนี้หากคุณพบว่ามีประโยชน์