有没有更有效的方法来重构ruby上哈希的迭代?

有没有更有效的方法来重构ruby上哈希的迭代?,ruby,hash,iteration,key,numeric,Ruby,Hash,Iteration,Key,Numeric,我在这里有一个迭代: container = [] summary_data.each do |_index, data| container << data end 我想删除数字键,例如1、3 我希望得到以下容器: 有没有更有效的方法来重构上面的代码 感谢您的帮助。您可以使用Hashvalues方法,如下所示: container = summary_data.values 您可以使用Hashvalues方法,如下所示: container = summary_data.v

我在这里有一个迭代:

container = []
summary_data.each do |_index, data|
  container << data
end
我想删除数字键,例如1、3

我希望得到以下容器:

有没有更有效的方法来重构上面的代码

感谢您的帮助。

您可以使用Hashvalues方法,如下所示:

container = summary_data.values
您可以使用Hashvalues方法,如下所示:

container = summary_data.values

您需要一个具有提供的哈希值的数组。您可以直接通过values方法获得。
summary_data.values

您需要一个具有提供的哈希值的数组。您可以直接通过values方法获得。
summary_data.values

如果内部散列都具有相同的结构,唯一有趣的信息是费用:

summary_data.values.map{|h| h[:orders][:fees] }
# => ["25.00", "30.00", "45.00"]
如果您想计算这些费用,可以将其转换为数字:

summary_data.values.map{|h| h[:orders][:fees].to_f }
# => [25.0, 30.0, 45.0]
使用美分作为整数可能更好,以避免任何浮点错误:

summary_data.values.map{|h| (h[:orders][:fees].to_f * 100).round }
=> [2500, 3000, 4500]

如果内部哈希都具有相同的结构,唯一有趣的信息是费用:

summary_data.values.map{|h| h[:orders][:fees] }
# => ["25.00", "30.00", "45.00"]
如果您想计算这些费用,可以将其转换为数字:

summary_data.values.map{|h| h[:orders][:fees].to_f }
# => [25.0, 30.0, 45.0]
使用美分作为整数可能更好,以避免任何浮点错误:

summary_data.values.map{|h| (h[:orders][:fees].to_f * 100).round }
=> [2500, 3000, 4500]

@SimpleLime-oops,我忽略了冒号:-@SimpleLime-oops,我忽略了冒号:-我建议您不要在这里使用dig,而是使用老式的h[:orders][:fees]。我们知道h[:orders]不应该为零。如果是,nil[:fees]将引发异常,这是我们想要的行为。相比之下,使用dig只会返回nil,没有任何抱怨。类似地,h.dig:orders,:fees.to\u f将返回0.0,如果to\u f的接收者为零;再说一遍,这不是我们想要的。我建议你不要在这里使用dig,而是使用老式的h[:orders][:fees]。我们知道h[:orders]不应该为零。如果是,nil[:fees]将引发异常,这是我们想要的行为。相比之下,使用dig只会返回nil,没有任何抱怨。类似地,h.dig:orders,:fees.to\u f将返回0.0,如果to\u f的接收者为零;再说一次,这不是我们想要的。