我有一系列颜色代码:
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
答案 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