【问题标题】:How to get the next element in an array but get first if current is last如何获取数组中的下一个元素但如果当前是最后一个则首先获取
【发布时间】:2017-10-24 14:02:15
【问题描述】:

我有一组颜色代码:

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

【问题讨论】:

    标签: arrays ruby loops


    【解决方案1】:

    使用cycle 方法,枚举器似乎是您要查找的。​​p>

    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"
    

    【讨论】:

    • 你应该使用另一个变量名,不过:array 不再是一个数组;-)
    • 它对您有用吗colors_enum?命名对我来说是个难题:D
    • 当然,color_cycle 也可以。
    • 查看cycle 的文档我似乎找不到给enumerator 一个起点的可能性。 IE。是否可以每次都从第一个元素开始获取下一个元素?
    • @FellowStranger cycle 的全部意义在于您不必记住位置。 cycle 为你做这件事。
    【解决方案2】:

    只是出于好奇,还有一些普通的旧算术(模计算)仍然存在:

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

    【讨论】:

    • 这是一个很好的解决方案。但我不明白你的 1234 的示例索引位置?
    • @FellowStranger 这只是一个随机数,让你明白使用模运算符你总是在数组范围内结束
    • 它也可以按预期使用负索引,即-1 % array.size 为您提供最后一项的索引,-2 % array.size 为倒数第二个等等。
    【解决方案3】:

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

    我会这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多