2013-01-16 11 views
5

Chcę przeszukać tablicę za pomocą częściowego ciągu znaków, a następnie uzyskać indeks, w którym znajduje się ten ciąg. Na przykład:Jak przeszukiwać tablicę za pomocą częściowego ciągu znaków i zwracać indeks?

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 

Korzystanie a.grep powróci pełny ciąg i używając a.any? zwróci poprawną prawdziwe/fałszywe oświadczenie, ale nie zwraca indeks gdzie mecz został znaleziony, a przynajmniej nie mogę dowiedzieć się, jak to zrobić.

Pracuję nad kawałkiem kodu, który odczytuje plik, szuka określonego nagłówka, a następnie zwraca indeks tego nagłówka, aby mógł go użyć jako przesunięcia dla przyszłych wyszukiwań. Bez rozpoczynania wyszukiwania od określonego indeksu moje inne wyszukiwania będą miały fałszywe trafienia.

+0

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-3D-7E – oldergod

+0

Chcesz tylko tablicę indeks, w którym znaleziono ciąg znaków lub indeks tablicy, a także przesunięcie w łańcuchu w tym elemencie tablicy? –

+0

Tylko pierwszy, ale byłbym zainteresowany drugim tylko do przyszłego użytku, ponieważ brzmi to tak, jak byłoby to bardzo przydatne! – user1976679

Odpowiedz

13

Użyj bloku.

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

lub

a.index{|s| s =~ /We have/} 
+0

Amazing! Myślałem, że include działa tylko z true/false, ale myliłem się! Działa to doskonale, dziękuję! – user1976679

Powiązane problemy