Ruby:如何使用符号表示数组中的内容?

Kyl*_*tan 1 ruby arrays idioms

我有一个数组数组,如下所示:

fruits_and_calories = [
  ["apple", 100],
  ["banana", 200],
  ["kumquat", 225],
  ["orange", 90]
]
Run Code Online (Sandbox Code Playgroud)

我还有一个我想在数组的每个元素上调用的方法:

fruits_and_calories.each do |f| eat(f[0], f[1])
Run Code Online (Sandbox Code Playgroud)

我真的希望能说出类似的话:

fruits_and_calories.each do |f| eat(f[:name], f[:calories])
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在不必更改数组中的每个项目的情况下将其拉出来(例如,通过迭代它并以某种方式添加符号)?或者,如果这太难了,还有更好的选择吗?

Pes*_*sto 9

最好的答案是根本不使用数组,而是使用哈希:

fruits_and_calories = { :apple => 100,
                        :banana => 200,
                        :kumquat => 225,
                        :orange => 90}
fruits_and_calories.each do |name, calories| 
  eat(name, calories)
end
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 7

在根本不改变数据结构的情况下,您可以更改块参数以实现相同的目的:

fruits_and_calories.each  do |name, calories|  eat(name, calories);  end
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为Ruby会将内部数组(["apple",100]等)自动扩展到块的参数列表中('do | name,calories | ... end').这是Ruby从Lisp继承的技巧,称为"解构参数".