Ruby 对于索引,每个索引都从1开始

Ruby 对于索引,每个索引都从1开始,ruby,ruby-on-rails-3,iterator,Ruby,Ruby On Rails 3,Iterator,我在rails应用程序中的视图上使用ruby迭代器,如下所示: <% (1..@document.data.length).each_with_index do |element, index| %> ... <% end %> ... 我认为增加1。。而不仅仅是说: @document.data 将获得使上面的索引从1开始的技巧。但遗憾的是,上面的代码索引仍然是0到data.length(-1)。那么我做错了什么,我需要索引等于1-data.length…不知

我在rails应用程序中的视图上使用ruby迭代器,如下所示:

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

...
我认为增加1。。而不仅仅是说:
@document.data


将获得使上面的索引从1开始的技巧。但遗憾的是,上面的代码索引仍然是0到data.length(-1)。那么我做错了什么,我需要索引等于1-data.length…不知道如何设置迭代器来实现这一点。

没有让索引从1开始这样的事情。如果要跳过数组中的第一项,请使用
next

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

如果索引=0,则下一步

数组索引总是以零为基

如果要跳过第一个元素(听起来像这样),请执行以下操作:

@document.data[1..-1].each do |data|
   ...
end

我想你可能误解了每个带有索引的代码

每个
将迭代数组中的元素

[:a, :b, :c].each do |object|
  puts object
end
哪些输出

:a
:b
:c
每个带有索引的\u
迭代元素,并传入索引(从零开始)

哪个输出

:a at index 0
:b at index 1
:c at index 2
:a at index 1
:b at index 2
:c at index 3
如果你想让它1-索引,那么只需添加1

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

:a at index 0
:b at index 1
:c at index 2
: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

如果我没弄错你的问题,你想从1开始索引,但是在ruby数组中,索引是0,所以最简单的方法是

给定的
@document.data
是一个数组

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

HTH

除非您使用的是像1.8这样的旧Ruby(我想这是在1.9中添加的,但我不确定),否则您可以使用
每一个。使用_index(1)
获得基于1的枚举数:

在您的情况下,它将是这样的:

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

...

希望有帮助

我也遇到了同样的问题,通过使用each_with_索引方法解决了这个问题。但是在代码的索引中添加了1

@someobject.each_with_index do |e, index|
   = index+1
使用:

产生:

value: a has index: 1
value: b has index: 2
value: c has index: 3

这可能不是完全相同的
每个带有索引的方法,但我认为结果可能接近mod中的要求

%w(a b c).each.with_index(1) { |item, index| puts "#{index} - #{item}" }

# 1 - a
# 2 - b
# 3 - c

有关详细信息

数组的第一个索引始终为
0
。该索引始终以零为基础。这有什么关系?@Codejoy-由于您的问题是由多个用户回答的,所以最好投票/接受一些答案。琐事:Perl有一个全局变量
$[
您可以将所有数组索引设置为从1或任何其他值开始。我们应该很高兴Ruby没有这个值。这几天肯定是更好的答案。我希望这个问题的作者能将此设置为正确答案。我为那些不深入阅读并忽略这一点的人感到难过。mod可以更改已接受的ans吗wer>在Ruby 2.6.4中工作,尽管我没有使用each***,并且一开始使用了下划线。