find_index
![Wide documentation Importance_3](https://d2vfyqvduarcvs.cloudfront.net/images/importance_3.png?1349367920)
find_index(p1)
public
Returns the index of the first object in self such that the object is
to obj. If a block is given instead of an
argument, returns index of first object for which block is true. Returns nil if no match is found. See also Array#rindex.
If neither block nor argument is given, an enumerator is returned instead.
a = [ "a", "b", "c" ] a.index("b") #=> 1 a.index("z") #=> nil a.index{|x|x=="b"} #=> 1
This is an alias of #find_index.
![Default_avatar_30](https://www.gravatar.com/avatar/1b2792536d87aa21bc739c14980fa103?default=http://apidock.com/images/default_avatar_30.png&size=30)
Using block version in Ruby < 1.8.7
The block usage was added in 1.8.7, so to get the same functionality in an earlier version of Ruby, you need to utilize the find method.
Here is a quick example:
match = list.find { |l| l.owner == myself } match_index = list.index(match)
If you do some gymnastics, you can have it on one line without extra variables:
match_index = list.index(list.find { |l| l.owner == myself })
![Default_avatar_30](https://www.gravatar.com/avatar/b04298947bce984ee6c441a44f9f862a?default=http://apidock.com/images/default_avatar_30.png&size=30)
Using find_index to return first match. Profit!
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"