ฉันขาดอะไรบางอย่างในเอกสาร Array หรือไม่ ฉันมีอาร์เรย์ที่มีออบเจ็กต์มากถึงหนึ่งชิ้นที่ตรงตามเกณฑ์ที่กำหนด ฉันต้องการค้นหาวัตถุนั้นอย่างมีประสิทธิภาพ ความคิดที่ดีที่สุดที่ฉันมีจากเอกสารคือ:
candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?
แต่ฉันไม่พอใจด้วยเหตุผลสองประการ:
- นั่น
select
ทำให้ฉันสำรวจอาร์เรย์ทั้งหมดแม้ว่าเราจะสามารถประกันตัวได้หลังจากการโจมตีครั้งแรก - ฉันต้องการรหัสบรรทัด (พร้อมเงื่อนไข) เพื่อทำให้ผู้สมัครแบนราบ
การดำเนินการทั้งสองอย่างสิ้นเปลืองโดยรู้ล่วงหน้าว่ามีวัตถุที่น่าพอใจ 0 หรือ 1 ชิ้น
สิ่งที่ฉันต้องการคือ:
array.find_first(block)
ซึ่งส่งคืนค่า nil หรืออ็อบเจ็กต์แรกที่บล็อกประเมินเป็น true โดยสิ้นสุดการข้ามผ่านที่อ็อบเจ็กต์นั้น
ฉันต้องเขียนเองหรือไม่? วิธีการที่ยอดเยี่ยมอื่น ๆ ทั้งหมดใน Array ทำให้ฉันคิดว่ามันอยู่ที่นั่นและฉันไม่เห็นมัน