2011-11-19 132 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