Ruby只反向索引,但保持值到位?

时间:2014-01-10 03:00:59

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

是否可以按给定的顺序循环结果集,但只能反向打印索引?例如:

items = ["a", "b", "c"]

items.each_with_index do |value, index|
  puts index.to_s + ": " + value
end

给出:

0: a
1: b
2: c

有没有办法只反转索引,以便输出为:

2: a
1: b
0: c

4 个答案:

答案 0 :(得分:3)

使用Enumerable#zip

>> items = %w{a b c}
>> (0...items.size).reverse_each.zip(items) do |index, value|
?>   puts "#{index}: #{value}"
>> end
2: a
1: b
0: c

答案 1 :(得分:3)

我不确定您想要实现的目标,但使用reverse_each链接枚举器可能很有用:

items.reverse_each.each_with_index do |value, index|
  puts index.to_s + ": " + value
end

产生

0: c
1: b
2: a

添加另一个reverse_each以获得您要求的结果:

items.reverse_each.each_with_index.reverse_each do |value, index|
  puts index.to_s + ": " + value
end

产生

2: a
1: b
0: c

答案 2 :(得分:0)

简单地从项目长度中减去索引,并附加1 - 以匹配索引:

items.each_with_index { |val, index| puts (items.length - index - 1).to_s + ": " + val }

答案 3 :(得分:0)

offset = items.length - 1
items.each_with_index { |value, i| puts "#{offset - i}: #{value}" }