问题是我不知道我是否可以在Ruby中设置数组的长度,我想设置长度为10的数组的长度而不在其中写入10个变量,这是否可能,如果是这样的话我能做到吗?
答案 0 :(得分:1)
创建一个给定大小的新数组,其元素设置为nil
:
Array.new(size)
设置为给定值的元素:
Array.new(size, "string")
答案 1 :(得分:0)
有多种方法可以做到这一点。
如果你只想要一个长度为nil
的{{1}}数组,那么:
size
如果你想要一个除a = Array.new(size)
以外的数组,那么:
nil
会起作用,但请注意,如果a = Array.new(size, default_value)
a = [default_value] * size
可变,这些可能会导致问题。这两个都为所有元素共享一个引用,如果您不了解引用共享,则会发生奇怪的事情;例如:
default_value
Ruby中的许多东西都是可变的,所以a = Array.new(6, 'pointer')
# ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer"]
a[0].upcase!
# "POINTER"
a
# ["POINTER", "POINTER", "POINTER", "POINTER", "POINTER", "POINTER"]
很少是你想要的。如果您使用布尔值,Array.new(size, default_value)
,数字,冻结字符串,符号等,那么这很好,因为您无法更改这些,参考分享不会让您感到困惑
您还可以向nil
提供一个区块:
Array.new
将为每个条目执行该块,以便您获得任何惊喜参考共享:
a = Array.new(6) { 'unique' }
这通常是你想要的。当然,它可以消耗更多内存并花费更多时间来创建数组,但如果其中任何一个都很重要,那么你可能在Ruby中采取了错误的方法。