2015-09-14 3 views
1

b - это максимальный победитель, который я хочу.Выберите уникальное случайное число из массива

b.times do 
    winner = participant[rand(participant.count)] 
end 

Мне нужно каждый раз генерировать уникальный победитель. Как я могу достичь этого, не внося слишком много изменений в этот код?

+0

Что такое " максимальный победитель "? – Stefan

+0

максимальное количество победителей конкурса хранится в b –

+0

@Supertracer, поэтому вам действительно нужно выбрать * b * победителей, а не одного. Это верно? – Stefan

ответ

4

Для этого уже существует метод. Просто используйте Array#sample:

winners = participants.sample(b) 
0

Вы можете использовать Array#delete_at, которая удаляет элемент в указанной позиции индекса и возвращает удаленный элемент. Теперь мы можем гарантировать, что товар один раз выбрал в качестве победителя не будет выбран снова

# sample data 
participant = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 
b = 3 

# preserve the original array 
p = participant.dup 

# pick winner 
b.times do 
    winner = p.delete_at(rand(participant.count)) 
end 

Вы можете использовать Array#sample (как ndn предложил), если ваша программа в порядке, чтобы получить все победители в одном кадре