获取ruby中所有键的总和

获取ruby中所有键的总和,ruby,hash,Ruby,Hash,如果键在ruby中具有不同的值,我将如何获得它们的总和 {"dog"=>1, "cat"=>3, "fish"=>5} = 9 示例中的键是字符串,值是整数。如果您想要整数的总和,可以执行以下操作:hash.values.sum: {"dog"=>1, "cat"=>3, "fish"=>5}.values.sum #=> 9 糟糕

如果键在ruby中具有不同的值,我将如何获得它们的总和

{"dog"=>1, "cat"=>3, "fish"=>5} = 9

示例中的键是字符串,值是整数。如果您想要整数的总和,可以执行以下操作:
hash.values.sum

{"dog"=>1, "cat"=>3, "fish"=>5}.values.sum
#=> 9

糟糕的是,我意识到这不是一个数组。我还可以这样做吗?@lost9123193这是您想要的吗?…或
hash.sum(&:last)
进行一次传递并避免创建临时数组。但是,不能保证它会更快。@CarySwoveland有趣的是,我不知道
#first
/
#last
对哈希有这种影响。谢谢我们有
obj.sum(&:last)
。任何
Enumerable
方法所做的第一件事是将其接收器转换为枚举器(如果它还不是一个):
enum=obj.u是?(枚举器)?obj:obj.每个
。由于
sum
有一个块,它指示
enum
生成
sum
传递到其块的元素(
{a | a.last}
。文档没有说明它返回的枚举器生成了哪些元素,但很容易看出它们是键值对的2元素数组
enum={a:1,b:2}.each;enum.next#=>[:a,1];enum.next#=>[:b,2]
。您的意思是,如果键具有相同的值,则需要从求和中忽略这些键?您希望求和值,而不是键。“…如果它们具有不同的值…”不清楚,但与您选择的答案不一致,该答案将所有值相加,而不参考其大小。您需要编辑该问题(包括标题)。