Почему "array.length" возвращает объект массива, когда мы помещаем его в array[]?

rand(array.length)        # returns random index <br>
array[rand(array.length)] # returns random array object

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

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)

4 ответа

Решение

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

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

array[ rand(array.length) ]

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

Ожидаемое вами поведение:

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

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

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

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

код рубина

kitty = [100,102,104,105]
kitty.sample                #to get random array elements
Другие вопросы по тегам