method

find_index

v2_1_10 - Show latest stable - Class: Array
find_index(*args)
public

Returns the index of the first object in ary such that the object is

to obj.

If a block is given instead of an argument, returns the index of the first object for which the block returns true. Returns nil if no match is found.

See also Array#rindex.

An Enumerator is returned if neither a block nor argument is given.

a = [ "a", "b", "c" ]
a.index("b")              #=> 1
a.index("z")              #=> nil
a.index { |x| x == "b" }  #=> 1

1Note

Using find_index to return first match. Profit!

l3x ยท Sep 27, 20131 thank

This example shows how to use find_index to return a result as soon as the first occurrence of what you are looking for is found.

==== Code example
class Widget < Struct.new(:name, :profit); end

class WidgetManager
def initialize(*widgets)
  @widgets = widgets
end
def is_any_widget_profitable?
  @widgets.find_index { |w| w.profit > 0 }  # <== usage!
end
end

wm = WidgetManager.new(Widget.new('a', -100), Widget.new('b', 200), Widget.new('c', 300))
wm.is_any_widget_profitable?  # => 1
(wm.is_any_widget_profitable?) ? 'some profit' : 'all loss'  # => "some profit"

wm = WidgetManager.new(Widget.new('a', -100), Widget.new('b', -200), Widget.new('c', -300))
wm.is_any_widget_profitable?  # => nil
(wm.is_any_widget_profitable?) ? 'some profit' : 'all loss'  # => "all loss"