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

วิธีใช้ Ruby Any, All, None &One

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

วิธีใช้ Ruby Any, All, None &One

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 .

หากคุณไม่เคยใช้วิธีเหล่านี้มาก่อน… ทำไมไม่ลองใช้ตอนนี้ล่ะ

โปรดแบ่งปันบทความนี้หากคุณพบว่ามีประโยชน์