2012-02-10 25 views
7

Làm cách nào để thêm giá trị vào đối tượng Hash bằng cách sử dụng khóa đã có giá trị. Vì vậy, ví dụ nếu tôi cóNối một giá trị vào một đối tượng băm (bằng Ruby), sử dụng một khóa đã tồn tại?

>> my_hash = Hash.new 
>> my_hash[:my_key] = "Value1" 
# then append a value, lets say "Value2" to my hash, using that same key "my_key" 
# so that it can be 
>> my_hash[:my_key] 
=> ["Value1", "Value2"] 

Tôi biết nó dễ dàng để viết phương pháp riêng của tôi, nhưng tôi chỉ muốn biết nếu có một xây dựng trong phương pháp.

Trả lời

9

Tôi không biết nếu tôi là thiếu điểm của bạn, nhưng có bạn coi như sau:

1.9.3 (main):0 > h={} 
=> {} 
1.9.3 (main):0 > h[:key] = [] 
=> [] 
1.9.3 (main):0 > h[:key] << "value1" 
=> ["value1"] 
1.9.3 (main):0 > h[:key] << "value2" 
=> ["value1", "value2"] 
1.9.3 (main):0 > h[:key] 
=> ["value1", "value2"] 
+0

oh ok ... vì vậy về cơ bản tôi chỉ sử dụng mảng bên trong băm ... những gì đã xảy ra là khi tôi cố gắng làm h [: key] << "value2" với việc thực hiện h [: key] = [], và nó giữ liên tục các chuỗi và trả về "value1value2", vì vậy tôi đoán tôi phải rõ ràng làm cho một mảng..thanks – bernabas

+0

@bernabasd Hơn chào đón! – lucapette

9

The Way Ruby, 2nd Edition có cả một chương về băm đa giá trị nếu tôi nhớ chính xác. Bất kể, không có nội trang cho hành vi này.

Tuy nhiên, bạn có thể vui vẻ với việc chuyển một khối vào Hash.new.

$ irb 
>> h = Hash.new { |hash, key| hash[key] = [] } 
=> {} 
>> h[:a] << "Value1" 
=> ["Value1"] 
>> h[:a] << "Value2" 
=> ["Value1", "Value2"] 
>> h 
=> {:a=>["Value1", "Value2"]} 
>> 

Nếu bạn muốn []= để luôn gắn thêm giá trị, bạn sẽ cần đến bản vá khỉ. Một lần nữa, không có gì được xây dựng để làm việc theo cách đó.

+1

+1 để chuyển một khối tới 'Hash # new'. Yêu nó! – lucapette

Các vấn đề liên quan