2011-11-19 134 views
2

我想寫我的代碼更緊湊。我有三個哈希。第一個散列(@hash)是子哈希值(值1,值)的集合,現在構建散列哈希

@hash = { 
    "Key" => ["value_1", "value_2"] 
} 

@value_1 = { 
    "Foo" => ["bar_1", "bar_2"] 
} 

@value_2 = { 
    "Foo2" => ["bar2_1", "bar2_2"] 
} 

,在我HAML視我試圖做這樣的事情:

- i = 0 

- @hash.each_value do |value| 
    - @value_[i].each_pair do |k, v| 
    = k 
    = v[0] 

- i = i +1 

我不想一個接一個地寫一個散列。這與從字符串中創建符號有些類似,您可以在其中編寫諸如「value _#{i}」to_sym之類的東西。我希望有人能跟隨並幫助我。

回答

1
@hashes = [ 
      { 
      "Foo" => ["bar_1", "bar_2"] 
      }, 
      { 
      "Foo2" => ["bar2_1", "bar2_2"] 
      } 
    ] 

然後

@hashes.each do |v| 
    v.each_pair do |k,v| 
    = k 
    = v[0] 

如果你需要索引使用each_with_index

編輯

試試這個:

- @hash.each_value do |value| 
    - value.each do |v| 
    - instance_variable_get(:"@#{v}").each_pair do |k, val| 
     = k 
     = val[0] 

API

+0

我的散列滿滿當當。我試圖避免碰到那裏的任何東西。我認爲在這個觀點中只會有一個簡單的伎倆。有點功夫風格:-) – Jens

+0

試試這個: - @ hash.each_value do | value | - value.each do | v | - send(:「@#{v}」)。each_pair do | k,val | = k = val [0] –

+0

是的,就是這樣。我不知道第3行發生了什麼,但它似乎是我想要的功夫。非常感謝你。 – Jens