Ruby中的数组和散列表(二)

Ruby中的数组和散列表(二)

數組類含有一組對象引用。每個對象引用占据數組中的一個位置,并由一個非負的整數索引來標識。可以通過使用字面量(literal),或顯式地創建Array對象,來創建數組。字面量數組(literal array)只不過是處于方括號中的一組對象。
a=[3.14159,"pie",99]
p a.class  
p a.length
p a[0]
p a[1]
p a[2]
p a[3]

輸出:
Array
3
3.14159
"pie"
99
nil
b=Array.new
p b.class
p b.length
b[0]="second"
b[1]="array"
p b

輸出:
Array
0
["second", "array"]

數組的下標從0開始。使用負數訪問數組,則從數組的末端開始計數。
a=[1,3,5,7,9]
p a[-1]
p a[-2]
p a[-99]

輸出:
9
7
nil

你也可以使用一對數字·[start,count]來訪問數組。這將會返回一個包含從start開始的count個對象引用的新數組。
a=[1,3,5,7,9]
p a[1,3]
p a[3,1]
p a[-3,2]

輸出:
[3, 5, 7]
[7]
[5, 7]
你還可以用范圍php?name=range" onclick="tagshow(event)" class="t_tag">range來對數組進行訪問。注意2個點的形式和3個點的形式的區別:
a=[1,3,5,7,9]
p a[1..3]
p a[1...3]
p a[3..3]
p a[-3..-1]

輸出:
[3, 5, 7]
[3, 5]
[7]
[5, 7, 9]
[]操作符有一個對應的[]=操作符,它可以設置數組中的元素。
a=[1,3,5,7,9]
a[1]='bat'
a[-3]='cat'
a[3]=[9,8]
a[6]=99
p a

輸出:
[1, "bat", "cat", [9, 8], 9, nil, 99]
a=[1,3,5,7,9]
a[2,2]='cat'
a[2,0]='dog'
a[1,1]=[9,8,7]
a[0..3]=[]
a[5..6]=99,88
p a

輸出:
["dog", "cat", 9, nil, nil, 99, 88]
用正数下标访问数组,下标从0开始,

用负数下标访问数组,下标从-1开始,

a=[1,3,5,7,9]

p a[-2,3]

得到有结果将是[7, 9],也就是说哪所取的范围长度超出数组的长度时,只显示到数组结束为止,并没有显示nil值

p a[-2,3] 与 p a[-2, 100]的效果是一样的
如下是我的理解:

数组是一组连续的内存地址,数组的名字就是这组连续地址的首地址,因此可以使用整数来进行索引,每个数组的下标就是表明第几个地址块,地址块的大小是按照数组中所占内存最大的决定的。举例说明:int a[3], 在c中数组必须是同类型的,a[1]就是在首地址上增加1个单位的int型所占空间比如2个字节。

散列表(哈希表)所谓散列就是指各个成员不在一段连续的内存中存放(有可能也是连续的,由编译器决定),每个key就是每个成员的地址。
引用:
原帖由 dongzhi 于 2007-11-23 11:21 发表
如下是我的理解:

数组是一组连续的内存地址,数组的名字就是这组连续地址的首地址,因此可以使用整数来进行索引,每个数组的下标就是表明第几个地址块,地址块的大小是按照数组中所占内存最大的决定的。举例 ...