如何获取数组中的下一个元素,但如果当前是最后一个,则获取第一个元素

时间:2017-05-24 09:46:36

标签: arrays ruby loops

我有一系列颜色代码:

array = %w(#646C74 #F68848 #1FA45C etc...)

每次查询数组时,我都会与最后使用的颜色进行比较,并希望获得下一个颜色。如果使用的最后一个是数组中的最后一个,我想要第一个。

是否有更专注或简洁的方法来解决这个问题:

index_of_last_used_color = array.index(last_used_color)
next_position = index_of_last_used_color + 1
if color = array[next_position]
    return color
else
    return array.first
end

3 个答案:

答案 0 :(得分:8)

使用cycle方法,枚举器似乎正在寻找。

color_cycle = %w(#646C74 #F68848 #1FA45C).cycle
color_cycle.next # => "#646C74"
color_cycle.next # => "#F68848"
color_cycle.next # => "#1FA45C"
color_cycle.next # => "#646C74"
color_cycle.next # => "#F68848"

答案 1 :(得分:4)

出于好奇,有一些普通的好的算术(模数计算)还活着:

array = %w(#646C74 #F68848 #1FA45C)
index = 1234
item = array[index % array.size]

答案 2 :(得分:1)

  

查看循环文档,我似乎没有找到为枚举器提供起点的可能性。即是不是每次都可以从第一个元素开始获取下一个元素?

我做这样的事情:

colors = array = %w(646C74 F68848 1FA45C)

"随机"从列表中获取颜色:

first_color = colors.delete_at(rand(colors.size))
colors # => ["646C74", "1FA45C"]

并将其推到列表的末尾:

colors << first_color

然后你可以在使用第一种颜色后开始骑自行车:

color_wheel = colors.cycle
colors.size.times do
  puts color_wheel.next
end

# >> 646C74
# >> 1FA45C
# >> F68848