Vermisse ich etwas in der Array-Dokumentation? Ich habe ein Array, das bis zu einem Objekt enthält, das ein bestimmtes Kriterium erfüllt. Ich möchte dieses Objekt effizient finden. Die beste Idee, die ich aus den Dokumenten habe, ist folgende:
candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?
Aber ich bin aus zwei Gründen unzufrieden:
- Das
select
hat mich dazu gebracht, das ganze Array zu durchqueren, obwohl wir nach dem ersten Treffer hätten aussteigen können. - Ich brauchte eine Codezeile (mit einer Bedingung), um die Kandidaten zu reduzieren.
Beide Operationen sind verschwenderisch mit dem Vorwissen, dass es 0 oder 1 zufriedenstellende Objekte gibt.
Was ich möchte, ist so etwas wie:
array.find_first(block)
Dies gibt nil oder das erste Objekt zurück, für das der Block true ergibt, und beendet die Durchquerung an diesem Objekt.
Muss ich das selbst schreiben? All diese anderen großartigen Methoden in Array lassen mich denken, dass es da ist und ich sehe es einfach nicht.