我想用1个元素填充一个数组但是5次。 到目前为止我得到了什么。
str = 1234
a = []
5.times { a << str }
puts a # => 1234, 1234, 1234, 1234, 1234
它有效,但这不是红宝石的方式。 有人能指出我正确的方向来启动一个具有相同值5倍的数组吗?
答案 0 :(得分:57)
Array.new(5, str)
# => [1234, 1234, 1234, 1234, 1234]
顺便说一下,命名一个赋值为str
的变量1234
是一种不好的做法。这很令人困惑。
答案 1 :(得分:24)
这应该有效:
[1234] * 5
# => [1234, 1234, 1234, 1234, 1234]
答案 2 :(得分:9)
虽然在字符串和其他不可变对象的情况下接受的答案是正确的,但我认为值得扩展Max对可变对象的评论。
以下内容将使用3个单独实例化的哈希填充元素数组:
different_hashes = Array.new(3) { {} } # => [{}, {}, {}]
以下内容将填充一个元素数组,并引用相同的哈希3次:
same_hash = Array.new(3, {}) # => [{}, {}, {}]
如果修改different_hashes的第一个元素:
different_hashes.first[:hello] = "world"
只会修改第一个元素。
different_hashes # => [{ hello: "world" }, {}, {}]
另一方面,如果修改same_hash的第一个元素,则将修改所有三个元素:
same_hash.first[:hello] = "world"
same_hash # => [{ hello: "world" }, { hello: "world" }, { hello: "world" }]
这可能不是预期的结果。
答案 3 :(得分:2)
您可以像这样填充数组:
a = []
=> []
a.fill("_", 0..5)
=> ["_", "_", "_", "_", "_"]