我一直在研究Ruby中的数组。特别是在Ruby Programming 1.9一书中使用a[start, count]
和a[lower_range..upper_range]
操作数组的效果。
具体来说,如果我有:
a = [1, 3, 5, 7, 9]
我做了以下事情:
a[2, 2] = 'cat'
我得到了一个:a => [1, 3, "cat", 9]
而不是我期望的[1, 3, "cat", "cat", 9]
编辑:谢谢大家的意见。所有方法都提出了建议。我现在明白了。
我更喜欢建议的Array.new方法,因为有一个任意范围,比如[2,n],我可以简单地使用,a[2, n] = Array.new(n, "cat")
太棒了,谢谢大家。
答案 0 :(得分:4)
将其视为将等号左侧的所有内容替换为右侧的所有内容。您正在用一个元素替换一个数组。如果要将其替换为多个元素,请使用a[2, 2] = Array.new(2, 'cat')
答案 1 :(得分:3)
发生的是索引2中的两个值被'cat'替换。您可以在以下位置看到:
a = [1, 3, 5, 7, 9]
a[2,2] # => = [5, 7]
a[2,2] = 'cat'
a # => [1, 3, 'cat', 9]
因此,使用array[start, count]
和array[range_start .. range_end]
替换数组的部分,而不是该范围内的所有索引。
答案 2 :(得分:3)
你选择了错误的方法。 []
进行元素分配(将选定范围替换为另一个)
您实际需要的是fill
:
a = [1, 3, 5, 7, 9]
#=> [1, 3, 5, 7, 9]
a.fill('cat', 2, 2)
#=> [1, 3, "cat", "cat", 9]
答案 3 :(得分:2)
元素分配的作用就像替换定义的范围一样。看看Ruby documentation for this useage。此赋值将位置2中的两个数组条目替换为RHS表达式。以下表达式应该达到您期望的结果:
a[2, 2] = ['cat', 'cat']
:)