Ruby on rails 为什么数组[2,2]=';数据';是否从数组[]中删除元素?
我一直在研究Ruby中的数组。特别是Ruby编程1.9书中使用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方法,因为对
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']
:)回答得好,但我要指出的是,使用数组。像这样的新语法将生成一个数组,其中每个元素都引用同一个对象,因此,如果在一个索引处修改元素,它们都会更改。