Est-ce que j'ai manqué quelque chose dans la documentation de Array ? J'ai un tableau qui contient jusqu'à un objet répondant à un certain critère. J'aimerais trouver efficacement cet objet. La meilleure idée que j'ai trouvée dans la documentation est la suivante :
candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?
Mais je suis insatisfait pour deux raisons :
- Ce
select
m'a fait traverser tout le tableau, alors qu'on aurait pu abandonner après le premier coup. - J'avais besoin d'une ligne de code (avec une condition) pour aplatir les candidats.
Les deux opérations sont inutiles si l'on sait à l'avance qu'il y a 0 ou 1 objet satisfaisant.
Ce que j'aimerais, c'est quelque chose comme :
array.find_first(block)
qui retourne nil ou le premier objet pour lequel le bloc est évalué à true, terminant la traversée à cet objet.
Dois-je l'écrire moi-même ? Toutes ces autres méthodes géniales dans Array me font penser que c'est là et que je ne le vois pas.