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