2016-05-26 6 views
-2

文字列変数の最初と2番目のインスタンスのインデックスを検索しようとしています。任意の定義済みの文字列変数を使用できるようにしたいが、それをしようとするとエラーが出る。 ss、aa、ffなどの複数の文字列変数を宣言し、xxの代わりに使用できるようにしたいと考えています。誰かが私を助けることができますか?Ruby要素の一致

#aa is a predefined array 
    xx = "--help--" 
    find_xx_instance = aa.each_with_index.select{|i,idx| i =~ /xx/} 
    #/--help--/works but not /xx/ 

    find_xx_instance.map! {|i| i[1]} 

    #gives me info between the first two instances of string 
    puts aa[find_xx_instance[0]+1..find_xx_instance[1]-1] 
+3

を、私はあると思う我々はLazy enumeratorを作成することによってそれを行うことができますこの質問にはあいまいさがたくさんあります。ソースコードは、テキスト段落と質問とは無関係のいくつかの方法のようです。コードの各行をテストし、予期せぬ方法で動作する最初のコードを確認してください。 'aa'のための小さなサンプル配列を与えてください。最初の割り当て後に各行が何をすべきかを正確に説明してください。 –

答えて

2

私が理解する限り、あなたは正規表現に変数を渡す必要があります。これを試してみてください:私はあなたが文字列の配列、arr与えられていると想定している

find_xx_instance = aa.each_with_index.select{|i,idx| i =~ /#{xx}/} 
0

、文字列str、および整数nを、配列を戻したいanの要素iがの指標であるi、 i番目の+1のインスタンスstrarrです。例えば

:これは、1つの方法です

arr = %w| Now is the time for the Zorgs to attack the Borgs | 
    #=> ["Now", "is", "the", "time", "for", "the", "Zorgs", "to", "attack", "the", "Borgs"] 
str = "the" 
nbr = 2 

:このような小さな問題について

arr.each_index.select { |i| arr[i]==str }.first(nbr) 

この

を書き込むことができます

b = arr.each_index.select { |i| arr[i]==str } 
    #=> [2, 5, 9] 
b.first(nbr) 
    #=> [2, 5] 

、それは大丈夫ですが、もしarrが大きい場合は、の後に計算を終了する方がよいでしょう。 strのインスタンスが210件見つかりました。

arr.each_index.lazy.select { |i| arr[i]==str }.first(nbr) 
    #=> [2, 5] 

は、ここで明確にarrnbr文字列strが発見された後lazyは計算を停止していることを示している第二の例です:

(0..Float::INFINITY).lazy.select { |i| arr[i] == str }.first(nbr) 
    #=> [2, 5] 
+0

@MartijnPieters、私は重複した回答を投稿したことを知らなかった。それを削除して私に知らせてくれてありがとう。 –

関連する問題