Почему "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