Ruby Newbie homepage Ruby Newbie homepage

How to use

Quick guide

Official content
Returns the index of a specified element.
When argument object is given but no block, returns the index of the first element element for which object == element:
a = [:foo, 'bar', 2, 'bar']
a.index('bar') # => 1
Returns nil if no such element found.
When both argument object and a block are given, calls the block with each successive element; returns the index of the first element for which the block returns a truthy value:
a = [:foo, 'bar', 2, 'bar']
a.index {|element| element == 'bar' } # => 1
Returns nil if the block never returns a truthy value.
When neither an argument nor a block is given, returns a new Enumerator:
a = [:foo, 'bar', 2]
e = a.index
e # => #<Enumerator: [:foo, "bar", 2]:index>
e.each {|element| element == 'bar' } # => 1
Array#find_index is an alias for Array#index.
Related: rindex.
               static VALUE
rb_ary_index(int argc, VALUE *argv, VALUE ary)
    VALUE val;
    long i;

    if (argc == 0) {
        RETURN_ENUMERATOR(ary, 0, 0);
        for (i=0; i<RARRAY_LEN(ary); i++) {
            if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
                return LONG2NUM(i);
        return Qnil;
    rb_check_arity(argc, 0, 1);
    val = argv[0];
    if (rb_block_given_p())
        rb_warn("given block not used");
    for (i=0; i<RARRAY_LEN(ary); i++) {
        VALUE e = RARRAY_AREF(ary, i);
        if (rb_equal(e, val)) {
            return LONG2NUM(i);
    return Qnil;

Was this page useful?