2012-07-01 2 views
0

Я использую Array.sample для возврата случайного элемента из массива.Как получить индекс элемента, возвращаемого sample()?

Я хочу, чтобы затем получить индекс этого элемента, чтобы создать постоянную ссылку. Есть ли встроенный метод для этого? Или мне нужно катиться самостоятельно?

+0

Я не знаю, рубин, но я могу дать вам совет .. Вы может создать свой собственный класс, который содержит элемент из массива, а также целочисленную переменную. и вы можете вернуть этот экземпляр, созданный из вашего класса. – unbalanced

+0

Если вам нужно как значение массива, так и индекс просто получить случайное число 0 и использовать его. –

+0

По существу, вы выбираете случайный индекс в пределах '0 <= x <длина (массив)'. Почему бы просто не выбрать случайное число в этом диапазоне, а затем извлечь элемент по этому индексу? –

ответ

3

Я не думаю, что есть предварительно испеченное решение, но вы можете сделать свой собственный достаточно легко. Вы можете использовать sample по индексам:

i = (0 .. a.length).to_a.sample 
e = a[i] 

Это дает вам как индекс, i и отобранной элемент, e. Или, так как вы просто извлекая образец размера одного, используйте rand непосредственно и пропустить все sample шум:

i = rand(a.length) 
e = a[i] 
+0

+1 для второго предложения. Он убивает обе птицы чисто, не создавая промежуточный диапазон в виде массива. –

+0

@theTinMan: я оставил первый, поскольку он хорошо обобщается на образец размера 'n> 1'. –

+0

Perfect .. спасибо! –

0

Что об использовании find_index?

Если у вас есть:

my_array = [:foo,:qux] 

Вы можете сделать:

my_sample = my_array.sample 

А потом:

my_index = my_array.find_index(my_sample) 
Смежные вопросы