2013-01-16 3 views
5

Ich möchte ein Array mit einer Teilzeichenfolge durchsuchen und dann den Index abrufen, wo diese Zeichenfolge gefunden wird. Zum Beispiel:Wie suche ich ein Array mit einer partiellen Zeichenfolge und den Index zurück?

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 

a.grep verwendet, wird der vollständige String zurück, und a.any? verwendet, wird eine korrekte Wahr/Falsch-Aussage zurück, aber weder gibt den Index, in dem die Übereinstimmung gefunden wurde, oder zumindest kann ich nicht herausfinden, wie es geht.

Ich arbeite an einem Codeabschnitt, der eine Datei liest, nach einem bestimmten Header sucht und dann den Index dieses Headers zurückgibt, damit er als Offset für zukünftige Suchvorgänge verwendet werden kann. Ohne meine Suche aus einem bestimmten Index zu starten, werden meine anderen Suchanfragen falsch-positiv.

+0

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

+0

Wollen Sie nur das Array Index, wo die Zeichenfolge gefunden wurde, oder der Array-Index, plus der Offset in die Zeichenfolge in diesem Array-Element? –

+0

Nur der erste, aber ich würde mich für den zweiten nur für den zukünftigen Gebrauch interessieren, weil das klingt, als wäre es sehr nützlich zu wissen! – user1976679

Antwort

13

Verwenden Sie einen Block.

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

oder

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

Erstaunlich! Ich dachte, Include würde nur mit True/False funktionieren, aber ich lag falsch! Das funktioniert perfekt, danke! – user1976679

Verwandte Themen