2015-05-08 5 views
1
rand(array.length)  # returns random index <br> 
array[rand(array.length)] # returns random array object 

Я не могу понять логику. Я бы предположил, что второй пример также возвращает случайный индекс, а затем сохраняет его в массиве.Почему «array.length» возвращает объект массива, когда мы помещаем его внутри массива []?

kitty = [100,102,104,105] 

rand(kitty.length)  # returns index, for example 3 (or 0,1,2) 
array[rand(kitty.length)] # returns random array object, for example 104 (or 100,102,105) 
+0

Вы спрашиваете, почему 'array [some_number]' возвращает элемент в массиве в этом индексе? – Tony

+2

Что происходит, когда вы выполняете 'array [3]' (или 0, 1, 2)? Это то же самое, что и ваш второй пример. 'rand (kitty.length)' возвращает целое число, которое затем используется для индексации 'array'. –

+1

Хорошо, я получил это Тони. rand (kitty.length) = index и array [index] возвращает объект массива. Так очевидно, и я не заметил. –

ответ

2

Хотя array.sample будет лучшим способом, чтобы получить случайный элемент из массива, я считаю, ОП спрашивает, как цепочки методов работы.

Когда вы позвоните: rand(array.length) номер возвращается, правда. Однако в случае:

array[ rand(array.length) ] 

число возвращается, но затем подается непосредственно в вызов массива, который дает вам объект по этому индексу массива.

0

Это учебник? Если да, надейтесь на это. array.sample - как это сделать.

+3

Наверное, хорошее предложение, но я не уверен, что он действительно отвечает на вопрос. Это кажется более подходящим в качестве комментария или сноски. –

0

код рубинового

kitty = [100,102,104,105] 
kitty.sample    #to get random array elements 
+0

Не знаю, если это то, что вы ищете? –

0

поведение вы описываете, как ожидается:

array[index] является ссылкой на объект в соответствующем массиве, где индекс представляет собой числовое значение, которое меньше array.length, поскольку rand(array.length) возвращает случайное числовое значение менее array.length, вы эффективно получаете доступ к элементу при случайном индексе данного массива.

Такое же поведение можно получить с помощью array.sample, хотя и рекомендуется.

Для получения дополнительной информации о массивах в Ruby можно найти в документации по адресу: http://ruby-doc.org/core-2.2.0/Array.html