ruby系列教材(20):Arrays

上一篇 / 下一篇  2008-02-02 15:20:25 / 个人分类:Ruby

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     2      3     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]类似,也是先删,后添


TAG: Ruby

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 22946
  • 日志数: 47
  • 建立时间: 2008-01-29
  • 更新时间: 2008-02-02

RSS订阅

Open Toolbar