38

次のように、Rails アプリのビューで ruby​​ イテレータを使用しています。

<% (1..@document.data.length).each_with_index do |element, index| %>
  ...
<% end %>

ただ言うのではなく、 1.. の追加を考えました: @document.data

上記のインデックスを 1 から開始するというトリックが得られます。しかし、残念なことに、上記のコード インデックスはまだ 0 から data.length (事実上 -1) です。だから私は何を間違っているのですか、1-data.lengthに等しいインデックスが必要です...これを行うためにイテレータを設定する方法がわかりません。

4

8 に答える 8

35

多分あなたは誤解していると思いますeach_with_index

each配列内の要素を反復処理します

[:a, :b, :c].each do |object|
  puts object
end

どの出力;

:a
:b
:c

each_with_index要素を繰り返し処理し、インデックスも渡します (ゼロから開始)

[:a, :b, :c].each_with_index do |object, index|
  puts "#{object} at index #{index}"
end

出力する

:a at index 0
:b at index 1
:c at index 2

1 インデックスにしたい場合は、1 を追加するだけです。

[:a, :b, :c].each_with_index do |object, index|
  indexplusone = index + 1
  puts "#{object} at index #{indexplusone}"
end

出力する

:a at index 1
:b at index 2
:c at index 3

配列のサブセットを反復処理する場合は、サブセットを選択して反復処理します

without_first_element = array[1..-1]

without_first_element.each do |object|
  ...
end
于 2013-01-17T20:39:04.267 に答える
2

インデックスを 1 から開始するようなものはありません。配列の最初の項目をスキップする場合は、 を使用しますnext

<% (1..@document.data.length).each_with_index do |element, index| %>
  next if index == 0
<% end %>
于 2013-01-17T20:38:34.783 に答える
1

私があなたの質問を正しく理解していれば、インデックスを1から開始したいのですが、Ruby配列ではベースインデックスが0になるため、最も簡単な方法は

与えられ@document.dataたのは配列です

index = 1
@document.data.each do |element| 
    #your code
    index += 1
end

HTH

于 2013-01-17T20:43:42.783 に答える
1

配列インデックスは常にゼロベースになります。

最初の要素をスキップしたい場合は、次のように聞こえます。

@document.data[1..-1].each do |data|
   ...
end
于 2013-01-17T20:38:47.560 に答える