a = [ 1, 3, 5, 7, 9 ] → [1, 3, 5, 7, 9]
a[2, 2] = ’cat’ → [1, 3, "cat", 9]
a[2, 0] = ’dog’ → [1, 3, "dog", "cat", 9]
a[1, 1] = [ 9, 8, 7 ] → [1, 9, 8, 7, "dog", "cat", 9]
a[0..3] = [] → ["dog", "cat", 9]
a[5..6] = 99, 98 → ["dog", "cat", 9, nil, nil, 99, 98]我可以理解这个数组的最后四个修改是如何工作的,但是为什么他们使用a2,2=‘猫’和a2,0 =‘狗’?
这两个数字代表什么?
难道他们不能直接用a2 =‘狗’吗?
发布于 2010-04-22 17:22:23
a[x,n]是a的子数组,长度为n,从索引x开始。
因此,a[2,2] = 'cat'的意思是“获取位置2和3处的项”,并将它们替换为'cat',这就是为什么它取代了5和7 -而不仅仅是5。
a[2,0] = 'dog'的意思是“获取位置2之前的空子数组,并将其替换为'dog'”。这就是为什么没有元素被替换的原因(a[2] = 'dog'会简单地用狗替换猫)。
发布于 2010-04-22 17:22:17
如果您在分配切片之前检查切片内容,则会很清楚
> a = [ 1, 3, 5, 7, 9 ]
> a[2, 2]
=> [5, 7] # this mean if you assign to that, the content overwrite on that part
> a
=> [1, 3, "cat", 9]狗也是一样的,0=‘a2’
> a[2,0]
=> [] # it will not overwrite anything,
> a[2, 0] = "dog" #but slice starts at index 2, so it will just insert 'dog' into array
=> [1, 3, "dog", "cat", 9]另一方面,a2返回5,赋值将覆盖数据,因此不同。
> a = [ 1, 3, 5, 7, 9 ]
> a[2]
=> 5
> a[2] = 'dog'
=> [1, 3, "dog", 7, 9] # a[2] got overwritten, instead of getting inserted.https://stackoverflow.com/questions/2689515
复制相似问题