使用数组内的启动器对数组进行排序

时间:2018-11-19 13:42:33

标签: arrays ruby indexing

对不起,我在提出问题时遇到问题。 更好地解释:

I have a = ["alice", "jean", "bob"]

现在,我想让用户选择谁将开始游戏。 如果是吉恩,则新数组应如下所示

a = ["jean", "bob", "alice"]

到目前为止,这是可行的:

def sort_array_players(array_player, starter)
  sort_array_player = []
  array_player.map do |name|
    if name == starter && name == array_player[0]
      sort_array_player = [array_player[0], array_player[1], array_player[2]]
    elsif name == starter && name == array_player[1]
      sort_array_player = [array_player[1], array_player[2], array_player[0]]
    elsif name == starter && name == array_player[2]
      sort_array_player = [array_player[2], array_player[0], array_player[1]]
    end 
  end 
  puts sort_array_player
end

我想修改这段代码,但是我对ruby还是有些陌生,我花了2个小时试图弄清楚这个问题。我的猜测是,您需要使用each.with_index,然后从第一个数组开始创建新数组,随后的元素将是索引为starter + 1的数组。

感谢帮助的人

1 个答案:

答案 0 :(得分:0)

如@rubish所述,您可以使用Array#rotate方法。

您可以使用正整数作为count参数来逆时针旋转项目,也可以使用负整数来顺时针旋转项目。

a = ["alice", "jean", "bob"]
starter = "jean"
count = a.index(starter) # => 1

a.rotate(count) # => ["jean", "bob", "alice"]