9

I want to search through an array using a partial string, and then get the index where that string is found. For example:

a = ["This is line 1", "We have line 2 here", "and finally line 3", "potato"]
a.index("potato") # this returns 3
a.index("We have") # this returns nil

Using a.grep will return the full string, and using a.any? will return a correct true/false statement, but neither returns the index where the match was found, or at least I can't figure out how to do it.

I'm working on a piece of code that reads a file, looks for a specific header, and then returns the index of that header so it can use it as an offset for future searches. Without starting my search from a specific index, my other searches will get false positives.

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
user1976679
  • 93
  • 1
  • 1
  • 3
  • http://www.ruby-doc.org/core-1.9.3/String.html#method-i-3D-7E – oldergod Jan 16 '13 at 00:13
  • Do you want only the array index where the string was found, or the array index, plus the offset into the string in that array element? – the Tin Man Jan 16 '13 at 00:15
  • Just the first one, but I would be interested in the second one just for future use, because that sounds like it would be very useful to know! – user1976679 Jan 16 '13 at 00:26

1 Answers1

23

Use a block.

a.index{|s| s.include?("We have")}

or

a.index{|s| s =~ /We have/}
sawa
  • 165,429
  • 45
  • 277
  • 381