J'utilise un itérateur Ruby sur une vue dans une application Rails comme suit:
<% ([email protected]).each_with_index do |element, index| %>
...
<% end %>
Je pensais que l’ajout du 1 .. au lieu de simplement dire: @document.data
l’index ci-dessus commencerait à 1. Mais hélas, l’index de code ci-dessus est toujours égal à 0 pour data.length (-1 effectivement). Alors qu'est-ce que je fais mal, j'ai besoin que l'index soit égal à 1-data.length ... aucune idée de la façon de configurer l'itérateur pour le faire.
Je pense que vous avez peut-être mal interprété each_with_index
.
each
va parcourir les éléments d'un tableau
[:a, :b, :c].each do |object|
puts object
end
quelles sorties;
:a
:b
:c
each_with_index
itère sur les éléments et passe également dans l'index (à partir de zéro)
[:a, :b, :c].each_with_index do |object, index|
puts "#{object} at index #{index}"
end
qui sort
:a at index 0
:b at index 1
:c at index 2
si vous voulez qu'il soit indexé 1, ajoutez simplement 1.
[:a, :b, :c].each_with_index do |object, index|
indexplusone = index + 1
puts "#{object} at index #{indexplusone}"
end
qui sort
:a at index 1
:b at index 2
:c at index 3
si vous voulez parcourir un sous-ensemble d'un tableau, choisissez simplement le sous-ensemble, puis parcourez-le
without_first_element = array[1..-1]
without_first_element.each do |object|
...
end
Sauf si vous utilisez un Ruby plus ancien comme 1.8 (je pense que cela a été ajouté dans 1.9 mais je ne suis pas sûr), vous pouvez utiliser each.with_index(1)
pour obtenir un énumérateur basé sur 1:
Dans votre cas, ce serait comme ça:
<% @document.data.length.each.with_index(1) do |element, index| %>
...
<% end %>
J'espère que cela pourra aider!
Si je comprends bien votre question, vous voulez commencer l’index à partir de 1, mais dans les tableaux Ruby, l’indice de base est 0, donc le moyen le plus simple serait de
@document.data
donné est un tableau
index = 1
@document.data.each do |element|
#your code
index += 1
end
HTH
Utilisez Integer#next
:
[:a, :b, :c].each_with_index do |value, index|
puts "value: #{value} has index: #{index.next}"
end
produit:
value: a has index: 1
value: b has index: 2
value: c has index: 3
Faire en sorte que l'index ne commence pas à partir de 1. Si vous voulez ignorer le premier élément du tableau, utilisez next
.
<% ([email protected]).each_with_index do |element, index| %>
next if index == 0
<% end %>
Un index de tableau sera toujours basé sur zéro.
Si vous voulez ignorer le premier élément, cela ressemble à ce que vous faites:
@document.data[1..-1].each do |data|
...
end
J'ai eu le même problème et je l'ai résolu en utilisant la méthode each_with_index. Mais ajouté 1 à l'index dans le code.
@someobject.each_with_index do |e, index|
= index+1