闲云无衣
无衣的笔记
Ruby的数组和hash都是带索引的集合。它们都可以容纳一组对象,并允许以索引键来访问这些对象。对数组而言,索引键是一个整数;而hash则允许用任何对象作为索引键。数组和hash都能够自动增长以容纳新的元素。数组和hash都可以容纳不同类型的对象。

数组:

方括号里列出元素并用逗号将它们相互隔开来创建一个数组. Ruby的数组可以适应不同的对象类型
ruby> ary = [1, 2, "3"]
   [1, 2, "3"]

在Ruby中数组中的元素可以是nil(null)。nil在Ruby中是一个对象与其它对象一样,不过它恰好代表“什么都没有”。

就像前面提到的字符串一样.数组也可以相乘或相加
ruby> ary + ["foo", "bar"]
   [1, 2, "3", "foo", "bar"]
ruby> ary * 2
   [1, 2, "3", 1, 2, "3"]

我们可用索引来访问数组的任意一部分.
ruby> ary[0]
   1
ruby> ary[0,2]
   [1, 2]
ruby> ary[0..1]
   [1, 2]
ruby> ary[-2]
   2
ruby> ary[-2,2]
   [2, "3"]
ruby> ary[-2..-1]
   [2, "3"]
(负数索引表示到数组末尾的偏移,而不是从开头算起.)

数组可以和字符串互相转化,分别使用join和split:
ruby> str = ary.join(":")
   "1:2:3"
ruby> str.split(":")
   ["1", "2", "3"]

数组的一个常用的方法是<<,该方法会把一个值附加到数组的尾端。
ages = []
for person in @people
    ages << person.age
end

Ruby提供一个快捷创建由单词组成的数组:
a=['ant','bee','cat']
#this is the same:
a=%w{ant bee cat}

哈希表

一个关联数组不通过连续的数字索引来访问,而是通过任何类型的主键(key)访问.这样的数组有时被叫作哈希(hash)或者字典 (dictionary).在Ruby里,我们趋向于用哈希这个术语.将一对对的元素用逗号分隔开,并用大括号({})括起来,这样就组成了一个哈希表. 你用一个关键字在哈希表里进行搜索,就像你在数组里用索引来提取数据一样.

ruby> h = {1 => 2, "2" => "4"}
   {1=>2, "2"=>"4"}
ruby> h[1]
   2
ruby> h["2"]
   "4"
ruby> h[5]
   nil
ruby> h[5] = 10     # appending value
   10
ruby> h
   {5=>10, 1=>2, "2"=>"4"}
ruby> h.delete 1   # deleting value
   2
ruby> h[1]
   nil
ruby> h
   {5=>10, "2"=>"4"}

=>左边的是索引键,右边的是与之对应的值。在同一hash中,索引键必须唯一。hash中的键和值可以是任意对象,甚至可以在hash中保存数组或别的hash.

在访问hash中的元素时,索引也是放在方括号中。

方法调用时,可以传入hash作为参数。如果这个hash正好是调用的最后一个参数,Ruby允许省略大括号。如rails中的redirect_to()方法
redirect_to :action =>'show', :id=>product.id


posted on 2007-02-07 11:17 无衣 阅读(3464) 评论(0)  编辑  收藏 所属分类: rails