2012-03-19 10 views
31

Jaka jest najszybsza metoda w Ruby, aby uzyskać pierwszy przeliczalny element, dla którego blok zwraca wartość true?Jaka jest najszybsza metoda w Ruby, aby uzyskać pierwszy przeliczalny element, dla którego blok zwraca wartość true?

Na przykład:

arr = [12, 88, 107, 500] 
arr.select {|num| num > 100 }.first # => 107 

Chciałbym to zrobić bez przebiegającej przez całą tablicę, jak select woli, ponieważ muszę tylko pierwszy mecz.

Wiem, że mogłem zrobić each i złamać na sukces, ale myślałem, że był rodzimej metody do tego; Po prostu nie znalazłem tego w dokumentacji.

Odpowiedz

61

Kilka podstawowych klas Ruby, w tym Array i Hash zawierać moduł Enumerable który oferuje wiele przydatnych metod do pracy z tych wyliczeń.

Moduł ten zapewnia find or detect methods które robią dokładnie to, co chcesz osiągnąć:

arr = [12, 88, 107, 500] 
arr.find { |num| num > 100 } # => 107 

Obie nazwy metod są synonimami do siebie i robią dokładnie to samo.

+0

+1, zupełnie zapomniałem o 'find', duh. –

+0

Ah! "find" to metoda, którą starałem się zapamiętać. Głupio mi, patrzyłem na dokumenty dla 'Array', a nie' Enumerable'. –

+4

znany również w świecie Ruby jako "wykryj" – tokland

4
arr[arr.index {|num| num > 100 }] #=> 107 
+0

To nie jest to, co było wymagane, ale to, czego potrzebowałem, dzięki! – Gabber

1
arr.find{|el| el>100} #107 (or detect; it's in the Enumerable module.) 
Powiązane problemy