为什么array [2,2] ='data'从array []中删除元素?

时间:2013-05-10 21:42:35

标签: ruby-on-rails ruby arrays

我一直在研究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")

太棒了,谢谢大家。

4 个答案:

答案 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']

:)