我---7号斋主人

已婚
爱老婆
I wanna be a happy fish...

星期三, 九月 20, 2006

数组和哈希in ruby

Ruby的数组和哈希是有序集合。两者都保存对象的集合,都可以通过键来访问元素。数组的键是一个整数,而哈希支持任何对象作键。数组和哈希都可以生长以便容纳新的元素,对访问元素来说,数组的效率高,但哈希却更灵活。数组和哈希都可以容纳不同类型的对象,你可以使用数组来包含一个整数、一个字符串和一个浮点数,就像你马上看到的那样。

你可以使用数组的字面值来创建和初始化一个数组---一个方括号括起来的元素集合。有了数组对象,就可以访问单个的数组元素,在方括号中写上一个序号就可以,下面的例子就是这样。

a = [ 1, 'cat', 3.14 ] # 三个元素的数组
# 访问第一个元素
a[0] >> 1
# 设置第三个元素的值
a[2] = nil
# 输出数组的值
a >> [1, "cat", nil]


你可以创建一个空数组,用一个没有元素的数组的字面值,或者用数组对象的构造器,Array.new。
empty1 = []
empty2 = Array.new

有时创建一个字符串的数组会变成一种痛苦,充满了引号和逗号,幸运的是,有一个快捷方式%w帮我们完成。

a = %w{ ant bee cat dog elk }
a[0] >> "ant"
a[3] >> "dog"


Ruby的哈希和数组相似,一个哈希的字面值使用大括号而不是方括号,字面值至少要为每一个条目提供两个对象:一个是键,一个是值。

举例来说,你可能希望把管弦乐团的乐器归类,使用哈希的话就是:

instSection = {
'cello' => 'string',
'clarinet' => 'woodwind',
'drum' => 'percussion',
'oboe' => 'woodwind',
'trumpet' => 'brass',
'violin' => 'string'
}


instSection = {
'大提琴' => '弦乐器',
'单簧管' => '木管乐器',
'鼓' => '打击乐器',
'双簧管' => '木管乐器',
'小号' => '铜管乐器',
'小提琴' => '弦乐器'
}


索引哈希使用和数组一样的方括号。

instSection['oboe'] >> "woodwind"
instSection['cello'] >> "string"
instSection['bassoon'] >> nil


最后这个例子显示出,如果使用一个不存在的键来索引哈希,默认返回nil。正常情况下这是很方便的,因为nil用在条件表达式中就是false。有时你希望改变这种默认值,例如,如果你使用哈希来计算每一个键出现的次数,那么比较方便的情况是默认值为0,在你创建一个新的空的哈希时改变默认值是很容易的。

histogram = Hash.new(0)
histogram['key1'] >> 0
histogram['key1'] = histogram['key1'] + 1
histogram['key1'] >> 1

数组和哈希对象还有许多有用的方法,学习中。

没有评论: