.включают? Массив [Rand (array.length)] - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь написать альтернативу методу 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!

1 Ответ

0 голосов
/ 20 апреля 2020

Потому что вы дважды вычисляете случайную песню: для проверки и при добавлении песни (так что вы не знаете, что заканчивается в массиве 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
...