2011-01-28 30 views
16

mới để ruby ​​và tôi đang cố gắng để tạo ra một mảng của băm (hay tôi có nó ngược?)HƯỚNG DẪN Tạo một mảng của Hashes trong Ruby

def collection 
    hash = { "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" } 
    array = [] 
    array.push(hash) 
    @collection = array[0][:firstname] 
end 

@collection không hiển thị các firstname cho đối tượng ở vị trí 0 ... Tôi đang làm gì sai?

Cảm ơn trước!

+1

"chìa khóa" =: Phím [2 more] –

Trả lời

40

Bạn đang sử dụng một Symbol như chỉ số vào đối tượng Hash sử dụng String vật như chìa khóa, vì vậy chỉ cần làm điều này:

@collection = array[0]["firstname"] 

Tôi sẽ khuyến khích bạn sử dụng Symbol s như Hash phím hơn là String s vì Symbol s được lưu vào bộ nhớ cache và do đó hiệu quả hơn, vì vậy đây sẽ là giải pháp tốt hơn:

def collection 
    hash = { :firstname => "Mark", :lastname => "Martin", :age => 24, :gender => "M" } 
    array = [] 
    array.push(hash) 
    @collection = array[0][:firstname] 
end 
+0

Xin lỗi .. Tôi không hiểu .. vì vậy những gì nên @collection được? – thedeepfield

+0

@odpogn Xem câu trả lời cập nhật. –

+0

OHHH (trán trán), cảm ơn! – thedeepfield

2

Bạn đã xác định các phím giá trị băm của bạn là String. Nhưng sau đó bạn đang cố gắng tham khảo nó như Symbol. Điều đó sẽ không hoạt động theo cách đó.

Hãy thử

@collection = array[0]["firstname"] 
+0

ohh ok, haha ​​thanks ~ – thedeepfield

1

Bạn có thể làm điều này:

@collection = [{ "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }] 
Các vấn đề liên quan