【问题标题】:.include? array[rand(array.length)]。包括?数组[rand(array.length)]
【发布时间】:2020-08-02 08:06:58
【问题描述】:

我正在尝试编写 shuffle 方法的替代方法,但不明白为什么它会返回重复项。有没有人看到问题?非常感谢!

def return_random_songs(songs)
  returned_songs = []
  while returned_songs.length < songs.length
    unless returned_songs.include?(songs[rand(songs.length)])
      returned_songs << songs[rand(songs.length)]
    end
  end
  return returned_songs
end

songs = ["song 1", "song 2", "song 3", "song 4"]
pp return_random_songs(songs)
=> ["song 2", "song 4", "song 1", "song 1"] #duplicates!

【问题讨论】:

  • 你为什么要写shuffle的替代品?使用现有方法,因为它经过良好测试并且已经可用。 .

标签: arrays ruby random include


【解决方案1】:

因为您计算了两次随机歌曲:用于检查和添加歌曲时(因此您不知道 returned_songs 数组中的最终结果)。试试

def return_random_songs(songs)
  returned_songs = []
  while returned_songs.length < songs.length
    random_song = songs[rand(songs.length)]
    unless returned_songs.include?(random_song)
      returned_songs << random_song
    end
  end
  return returned_songs
end

【讨论】:

  • 谢谢! (awww .. 这么简单的事情可以忽略)
  • 我的快乐小姐
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多