ruby系列教材(3):Arrays and Hashes

上一篇 / 下一篇  2008-02-02 14:40:19 / 个人分类:Ruby

Collections : 用于存储元素(element),Arrays & Hashes就是 collections,这里的元素可以是任意类型的,注意我强调的是:element是任意类型的对象的,而不是说Arrays Hashes保存特定类型的对象,这有什么区别呢?比如:arr = [1,"happy",123.22] 是可行的。最后强调一个术语:key,key提供了访问element的途径,访问的时候使用必须使用 key,Arrays和Hashes的key是有区别的,实际上,Hashes的key更加灵活。

 

Arrays的例子:

a = [ 1, 'cat', 3.14 ]   #Arrays使用[],这样的表现形式,[ 1, 'cat', 3.14 ] 被叫做 array literal

a[0] → 1                   #Arrays的key从0开始

a[0] = nil                   #nil 是一个表示没有对象的对象,也就是说nil本身是一个对象

 

*请不要小看literal这个术语,object 的create & initialize都要使用到 literal,因为ruby里面是不能声明变量的,虽然我们还有别的方式,比如new方法

 

Array:

1. key必须是整数类型的对象

2.Arrays的特殊用法,%w,例:

a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ]

a[0]→"ant"

a[3]→"dog"

 

# this is the same:

 

a = %w{ ant bee cat dog elk }     #使用%w,里面的元素都不需要引号,解释器认为里面全部为字符串

                                                    #%w{}是上面完全的替代品,也就是说,元素只能是字符串的(即里面的元素都是'xxx'而不是"xxx".不支持转义字符和#{})

a[0]→"ant"

a[3]→"dog"

 

值得提醒的是我们前面说过的,对字符串的解析

a = ["hi"]
b = ["hi\n"]
c = ["hi#{1}"]

这些都是允许的表达

 

对于%w:

a = %w{hi\n}
puts a[0]
^Z
hi\n              #不支持转义字符和#{},也就是%w{}中的字符串,都是 ' 引起来的

 

 

 

Hashes:

1.Hashes的key,value可以为任意的object

2.Hashes literal 使用大括号:

{

'cello'=> 'string',                       #其中 => 的左边为 key,右边为value(值)

'clarinet' => 'woodwind',

'drum'=> 'percussion',

'oboe'=> 'woodwind',

'trumpet'=> 'brass',

'violin'=> 'string'

}

 

举例:

inst_section = {

'cello'=> 'string',                     #这里不单单可以使用 ' 也可以使用 " 

'clarinet' => 'woodwind',         #key必须唯一

'drum'=> 'percussion',

'oboe'=> 'woodwind',

'trumpet'=> 'brass',

'violin'=> 'string'

}

 

inst_section['oboe']→"woodwind"

inst_section['cello']→"string"

inst_section['bassoon']→nil           #key 不存在的时候返回nil

 

有趣的事情出来了,我们可以这样使用:

$state = "dynamic value"

a = {
"#$state" => 'sd'
}
puts a["dynamic value"]

 

这样,我们就动态的分配了一个key值,以后我们会发现它的好处,这里在补充一下,'xxx'与"xxx"的区别,我们可以这样理解:任何"xxx"都将被转换成为'xxx'来运行,所以'abc'=="abc",但是"xxx"接受转义字符和#{},而且速度比 ' 的慢(具体慢的程度,无法考证,也没有研究,本人也对此持有保留态度)

 

最后说一下nil,nil在条件表达式里面,表示false


TAG: Ruby

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

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

RSS订阅

Open Toolbar