Project

General

Profile

Actions

Feature #17056

open

Array#index: Allow specifying the position to start search as in String#index

Feature #17056: Array#index: Allow specifying the position to start search as in String#index

Added by TylerRick (Tyler Rick) over 5 years ago. Updated about 5 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:99380]

Description

I have a use case of finding the first matching line within a given section in a file. After finding the line number of the start of the section, I want to find the first match after that line.

My workaround for now is to use with_index:

lines = pathname.read.lines section_start_line = lines.index {|line| line.start_with?(/#* #{section_name}/) } lines.index.with_index {|line, i| i > section_start_line && line.include?(sought) } 

I'd like to do it in a more concise way using a feature of Array#index that I propose here, which is analogous to String#index.

If the second parameter of String#index is present, it specifies the position in the string to begin the search:

'abcabc'.index('a') # => 0 'abcabc'.index('a',2) # => 3 

I would expect to also be able to do:

'abcabc'.chars.index('a') # => 0 'abcabc'.chars.index('a', 2) 

Using such feature, I would be able to do:

lines.index(sought, section_start_line) 

This would give Ruby better parity with other programming languages like Python:

>>> list('abcabc') ['a', 'b', 'c', 'a', 'b', 'c'] >>> list('abcabc').index('a') 0 >>> list('abcabc').index('a', 2) 3 

End index

We can further think of an optional parameter to specify the position to end the search. The following languages allow specifying both start and end indexes:

Ruby's String#index does not have one, so we could make a separate proposal to add end to both methods at the same time.


Related issues 1 (0 open1 closed)

Actions

Also available in: PDF Atom