用元素填充数组N次

时间:2014-06-26 13:44:49

标签: ruby

我想用1个元素填充一个数组但是5次。 到目前为止我得到了什么。

str = 1234
a = []

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

它有效,但这不是红宝石的方式。 有人能指出我正确的方向来启动一个具有相同值5倍的数组吗?

4 个答案:

答案 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)
=> ["_", "_", "_", "_", "_"]