新手问题 入门小问题, 求个解释

zsxywz0928 · 2013年11月25日 · 最后由 yltian 回复于 2013年11月26日 · 2125 次阅读
2.0.0p247 :007 > a = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
2.0.0p247 :008 > a[4,0]
=> []
2.0.0p247 :009 > a[5,0]
=> []
2.0.0p247 :010 > a[6,0]
=> nil 

如上,为什么到 a[6,0] 返回值就成 nil 了呢?

a[6,0] #=> nil

这个好说,因为 6 超出范围了呗。 但是

a[5,0] #=> []

这个就很怪了…… 文档里直接说这是特殊情况……

@messiahxu 5 也超范围了吧.... 这个数组的下标是 0 到 4 啊

5 不也超出索引的范围了麽?照常理也该返回 nil 才是啊

@glz1992 是呀,所以很奇怪啊.... 我才来发帖问的

文档里面说当索引开始处为数组区间末尾时会返回一个空数组。 原文:an empty string is returned when the starting index for a character range is at the end of the string.

@glz1992 是呀,4 是数组区间末尾啊,当 4 为索引开始处的时候是返回空数组啊,那为什么 5 为索引开始的时候还是空数组呢?

官方文档里面的图你看看 Array 类的 [] 方法

@glz1992 所以说是 special case 吗???

确实是特例,但是你看图上面的文字,说索引是在元素之前,就是说 a[4,0] 中索引 4 是在数组 a 中第四个元素的前面而不是数组的末尾处。

@glz1992 貌似有点理解,但是又差那么一点的感觉,谢谢你啦

@zsxywz0928 a[n, 0] 是在索引 n 处插入元素,这里 0 的含义是“换掉 0 个元素”。见《Ruby Programming》p109 是不是这个原因?索引 5 是可以插入的,而 6 不可以,因为 5 都没有,怎么插入啊?

#11 楼 @yltian 看来就是这样……

#11 楼 @yltian 你能贴一下 <> p109 关于这里的原文嘛?

a[n, m] 的意思是从索引 n 处开始,取 m 个元素出来,这里不存在 替换 呀?

@zsxywz0928 看 2.0 版的文档吧,里面有说:数组长度的的 range 是一个空数组。具体可以看这里 http://ruby-china.org/topics/13325,

#13 楼 @lgn21st

作为改下元素的应用,实际上也能保持现在所有的元素原封不动,而将值插入数组里。“[n,0]”,实际上就是在索引 n 处插入元素。 alpha = ['a', 'b', 'c', 'd', 'e'] alpha[2, 0] = ['X', 'Y'] p alpha #=> ['a', 'b', 'X', 'Y', 'c', 'd', 'e']

当然 a[n,m] 也可以用来取值,这里读和写很灵活,我试了这个,发现后面的 1 位被覆写掉了

alpha = ['a', 'b', 'c', 'd', 'e'] alpha[2, 1] = ['X', 'Y'] p alpha #=> ['a', 'b', 'X', 'Y', 'd', 'e']

需要 登录 后方可回复, 如果你还没有账号请 注册新账号