Ruby on rails 为什么数组[2,2]=';数据';是否从数组[]中删除元素?

Ruby on rails 为什么数组[2,2]=';数据';是否从数组[]中删除元素?,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,我一直在研究Ruby中的数组。特别是Ruby编程1.9书中使用a[start,count]和a[lower\u range..upper\u range]操作数组的效果 具体而言,如果我有: a = [1, 3, 5, 7, 9] 我做了以下工作: a[2, 2] = 'cat' 我得到a的输出:a=>[1,3,“cat”,9] 而不是我期望的[1,3,“cat”,“cat”,9] 编辑:谢谢大家的意见。所有这些方法都说明了这一点。我现在明白了 我更喜欢所建议的Array.new方法,因为对

我一直在研究Ruby中的数组。特别是Ruby编程1.9书中使用
a[start,count]
a[lower\u range..upper\u range]
操作数组的效果

具体而言,如果我有:

a = [1, 3, 5, 7, 9]
我做了以下工作:

a[2, 2] = 'cat'
我得到a的输出:
a=>[1,3,“cat”,9]

而不是我期望的
[1,3,“cat”,“cat”,9]

编辑:谢谢大家的意见。所有这些方法都说明了这一点。我现在明白了

我更喜欢所建议的Array.new方法,因为对于任意范围,如[2,n],我可以简单地使用,
a[2,n]=Array.new(n,“cat”)


太棒了,谢谢大家。

把它想象成用右边的东西代替等号左边的东西。您正在用单个元素替换数组。如果要将其替换为多个元素,请使用[code>a[2,2]=Array.new(2,'cat')

将索引2中的两个值替换为'cat'。您可以在以下内容中看到这一点:

a = [1, 3, 5, 7, 9]
a[2,2] # => = [5, 7]
a[2,2] = 'cat'
a # => [1, 3, 'cat', 9]

因此,使用
数组[start,count]
数组[range\u start..range\u end]
替换数组的该部分,而不是该范围内的所有索引。

选择了错误的方法<代码>[]进行元素分配(替换另一个上的选定范围)

您实际需要的是
填充

a = [1, 3, 5, 7, 9]
#=> [1, 3, 5, 7, 9]
a.fill('cat', 2, 2)
#=> [1, 3, "cat", "cat", 9]

元素分配的工作方式类似于已定义范围的替换。请看下面的图片。此赋值将位置2的两个数组项替换为RHS表达式。以下表达式应达到预期的结果:

a[2, 2] = ['cat', 'cat']

:)

回答得好,但我要指出的是,使用
数组。像这样的新
语法将生成一个数组,其中每个元素都引用同一个对象,因此,如果在一个索引处修改元素,它们都会更改。