1

ループの先頭から開始せずに、ループ内の次の要素を取得する方法はありますか?

次の要素への反復が可能であることは知っていnextますが、ループの先頭から開始されます。次の要素を取得して、ループ内の次のステートメントに進みたい。

次のような構造のテキスト ファイルを解析しています。

element 1
part 1
part 2

element 2
part 1
part 2

要素ごとに 11 個のパーツがあることに注意してください。これは単なる例です。また、構文解析中にはぎ取られた行が時々あるので、ループの反復ごとに一定の要素数だけ進めることはできないと思います。

すべてのテキストを配列に読み込んでから、次のようなものを使用して各行を処理したいと考えています。

text.each do |L|
  #if L is new element create object to store data
  #parse next line store as part 1
  #parse next line store as part 2
end

ループと、配列に明示的にインデックスを付け、毎回必要な量だけインデックス変数をインクリメントする C のようなコーディング スタイルでこれを行う方法を知っていますwhileが、Ruby でこれを行う方法があるかどうか疑問に思っています。 . に似てnextいますが、ループの先頭から開始するのではなく、次の要素だけで、ループ内の同じポイントから続行します。


編集:

whileループでこの問題を解決する方法の簡単な例を次に示します。

text = ["a", "b", "c", " ", " ", "d", "e", "f"]
i = 0
while i < text.length do
  if text[i] == " " then
    i += 1
  else
    a = text[i]
    b = text[i+1]
    c = text[i+2]
    puts a + b + c
    i += 3
  end
end

私が書いている実際のコードはもっと複雑であることに注意してください。ここで、私がやりたいことを説明する最も簡単な例を考え出そうとしました。

4

2 に答える 2

3

単純。に変更eacheach_with_index、次のインデックスを使用します。

text.each_with_index do |L, i|
  #Get next element
  text[i + 1]
end

ただし、特定の問題にははるかに優れた解決策があります。使用each_slice:

text.each_slice(num_of_parts_to_element + 1) do |element|
  element[0] #element 1
  element[1..-1].each do |part|
    #Iterate over the parts
  end
end
于 2013-08-31T21:38:24.383 に答える