Ответ 1
Array.new(5, str)
# => [1234, 1234, 1234, 1234, 1234]
Кстати, это неправильная практика для обозначения переменной str
, которой присваивается значение 1234
. Это запутанно.
Я хочу заполнить массив 1 элементом, но 5 раз. Что я до сих пор знаю.
str = 1234
a = []
5.times { a << str }
puts a # => 1234, 1234, 1234, 1234, 1234
Это работает, но это не рубиновый путь. Может ли кто-нибудь указать мне в правильном направлении, чтобы инициализировать массив с 5-кратным значением?
Array.new(5, str)
# => [1234, 1234, 1234, 1234, 1234]
Кстати, это неправильная практика для обозначения переменной str
, которой присваивается значение 1234
. Это запутанно.
Это должно работать:
[1234] * 5
# => [1234, 1234, 1234, 1234, 1234]
Несмотря на то, что принятый ответ подходит для строк и других неизменяемых объектов, я думаю, что он стоит расширять на 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" }]
что, вероятно, не является предполагаемым результатом.
Вы можете заполнить массив следующим образом:
a = []
=> []
a.fill("_", 0..5)
=> ["_", "_", "_", "_", "_"]