打印

[问题求助] 关于Array数组赋[]后的不同结果

关于Array数组赋[]后的不同结果

a = [1, 2, 3, 4, 5]
a[0] = []    ->[ , 2, 3, 4, 5]
puts a.length   ->5
a[0..0] = []   ->[2, 3, 4, 5]
puts a.length   ->4

两种方式赋[](空值?)后,length长度不同,哪位可以做此解释?

TOP

arr.[ ]= 这个方法的参数有三种形式
1.参数为1个数字int,设置下标为int的元素
2.参数为两个数字,start,end, 替换从start开始到end结束处的元素
3.参数为一个区间range,替换由range指定的子数组
注意加粗部分

a[0] = []    ->[ , 2, 3, 4, 5]
a[0..0] = []   ->[2, 3, 4, 5]


执行第二步的时候是把a数组的子数组[nil]替换成空数组[]
注意子数组虽然只有一个nil元素,但他还是长度为一的数组
把[nil]替换成空数组,剩下的a就是[2,3,4,5]了.所以长度是4

再举个例子

a = [1,2,3,4,5]
a[1..3] = "A"
p a    #=>[1,"A",5]


Digging ruby with Pickaxe,
Running agilely on rails

TOP

学习中!!1

TOP

感谢 xavier 的解释。

看来主要是三个方法,第一个是设置,第二、三个是替换 

TOP

佩服你,厉害,不错的贴

提示: 作者被禁止或删除 内容自动屏蔽

TOP

2008-11-20 07:41 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61