Подтвердить что ты не робот

Заполнить массив элементом N раз

Я хочу заполнить массив 1 элементом, но 5 раз. Что я до сих пор знаю.

str = 1234
a = []

5.times { a << str }
puts a # => 1234, 1234, 1234, 1234, 1234

Это работает, но это не рубиновый путь. Может ли кто-нибудь указать мне в правильном направлении, чтобы инициализировать массив с 5-кратным значением?

4b9b3361

Ответ 1

Array.new(5, str)
# => [1234, 1234, 1234, 1234, 1234]

Кстати, это неправильная практика для обозначения переменной str, которой присваивается значение 1234. Это запутанно.

Ответ 2

Это должно работать:

[1234] * 5
# => [1234, 1234, 1234, 1234, 1234]

Ответ 3

Несмотря на то, что принятый ответ подходит для строк и других неизменяемых объектов, я думаю, что он стоит расширять на Max комментарий о изменяемых объектах.

Предположим, вы хотите заполнить массив элементов с помощью 5 пустых хэшей:

xs = Array.new(3) { {} }

Вышеупомянутый элемент вернет массив из следующих элементов:

[{}, {}, {}]

Если вы затем измените первый элемент массива:

xs.first[:hello] = "world"

Будет изменен только первый элемент.

xs # => [{ hello: "world" }, {}, {}]

С другой стороны, использование Array.new(3, {}) даст массив со всеми элементами, указывающими на один и тот же хеш:

xs = Array.new(3, {}) # => [{}, {}, {}]
xs.first[:hello] = "world"
xs # => [{ hello: "world" }, { hello: "world" }, { hello: "world" }]

что, вероятно, не является предполагаемым результатом.

Ответ 4

Вы можете заполнить массив следующим образом:

a = []
=> []

a.fill("_", 0..5)
=> ["_", "_", "_", "_", "_"]