ruby的数组

[复制链接]
查看11 | 回复0 | 2006-8-16 22:14:00 | 显示全部楼层 |阅读模式
containers: objects that hold references to one or more other objects.(container is a set of references)
arrays --- container
Array literals:
表现形式:
[1,2,3]
['a','b','c']
index我们常常也叫做key,使用index获取数组elements:
1.获取单个element:
a = ["my","you","it"]
a[0] #值是"my"
a[1] #值是"you"
a[2] #值是"it"
先来说一下indices,对于一个array,我们可以认为array elements从0开始,一直到array的长度减1,也可以认为数组最高位置为-1,以后的每个都减去1,比如:
a[0] == a[-3]#true
a[2] == a[-1]#true
我们为什么要使用负的indices? 因为除了从0开始检索这样的情况,我们有时候还需要从最大的位置开始检索,这时通常的做法是需要求得array的elements的数量,然后使用,我们知道,这样的方式不是直接的,而ruby是一种简洁的语言,这样的一种检索方法,也就是ruby简洁的一种表现,举例:
indices:0 1 23 4 5 6

-7-6-5-4-3-2-1
a =['ant','bat','cat','dog','elk','fly','gnu']

这里"[]"是一个operator,就像"+","-"一样,对于一个operator,它实际上是class里面的一个method,注意,当index或者说是key的值超过了界限,比如说:
test = ['first ','second ','third ']
puts test[0],test[1],test[2],test[3] #test[3]得到一个nil的值
结果:
first
second
third
nil

2.获取多个elements:
数组还可以使用这样的index [start,count],得到的结果将是array object,例如上面的 test array:
test2 = test[0,2]
结果test2为:['first ','second ']
同时,我们也可以使用Range Object来取得多个elements,得到的结果将是一个array object:
test2[0..1] #结果为['first ','second ']
*强调一下,所有的[],里面操作的都是keys的集合(也叫做indices)


数组赋值操作:
这里补充一下,数组的长度求法: a.length
前面已经提到了"[]"这个operator,作用是取得array里面的elements,同样对应的"[]="这个operator,作用是为特定的数组位置赋值,下面详细说明:
a = [ 1, 3, 5, 7, 9 ]→[1, 3, 5, 7, 9]
a[1] = 'bat'
→[1, 'bat', 5, 7, 9]
a[-3] = 'cat'
→[1, 'bat', 'cat', 7, 9]
a[3] = [ 9, 8 ]
→[1, 'bat', 'cat', [9, 8], 9]
a[6] = 99
→[1, 'bat', 'cat', [9, 8], 9, nil, 99]
#可以在arrays不存在的位置里面使用赋值(调用[]=method),比如最后的一次操作,这时候a[5]位置为nil

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]
#通过[start,count],[a..b]这样的形式赋值,改变的是elements,假如是赋值对象是array,被赋值的部分是array里面的elements,a[0..3]=[]这里[]表示空element,空element是需要会被移除的,因为array的element不允许是空element

1.[start,count]形式:
array_name[start,count],先删除 array_name 中 indices 在[start,count]中的elements,然后从start开始添加array_name[start,count]=后面的值,值可以是一个,也可以是多个,使用逗号分开,如果是array,这个array会被拆分它的elements

2.[Range object]形式:
和[start,count]类似,也是先删,后添
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行