使用数组中的键迭代哈希,并对结果求和

Posted

技术标签:

【中文标题】使用数组中的键迭代哈希,并对结果求和【英文标题】:Iterate over a hash using keys from an array, and sum the results 【发布时间】:2016-01-31 08:31:28 【问题描述】:

我有一个 Hash 将一堆 ID 索引到一个值,例如:

hash = 1: 3.00, 2: 4.00, 3: 2.00, 4: 15.00, 5: 12.00, 6: 1.00

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

arr = [2, 3, 6]

什么是一种简短的 Ruby 惯用方式来迭代我的 Array 并将 Hash 中相应键的累积总数相加?

上面的结果等于:

4.00 + 2.00 + 1.00 == 7.00

【问题讨论】:

这个问题是在三个多星期前发布的。有趣的是,没有人指出hash 不是有效对象。语法 1: 2 :1=>2 的简写,但符号不能以数字开头。 "1": 2 可以,但我怀疑你的意思是 ( 1=>2 。此外,写入小数点后两位或多位数字的值(浮点数)也是没有意义的,最后一位是零,因为 Ruby 会丢弃最后的零。 【参考方案1】:
hash = 1=>3.0, 2=>4.0, 3=>2.0, 4=>15.0, 5=>12.0, 6=>1.0
arr = [2, 3, 6]

arr.reduce(0)  |t,e| t + hash[e] 
   #=> 7.0

【讨论】:

我坚持认为我的方式更加红宝石。你的可能更高效,但没有那么性感。 :) 我们可以同意。请参阅我对这个问题的评论。 哦该死的,从来没有注意到奇怪的键。 您期待莫斯科的另一个冬天吗?我在渥太华住了几年,所以可以想象它是什么样的。在运河上滑冰很有趣,但我讨厌刺骨的寒冷,这似乎永远不会结束。 莫斯科的冬天主要由破鞋组成(因为它们倾倒在道路上的所有化学物质都是为了防止结冰)。有点滑冰,如果你幸运的话。但大多是破鞋和半融化的雪泥水坑:)我期待吗?一定不行。 :)【参考方案2】:
arr.map |i| hash[i].reduce(:+)

【讨论】:

虽然此答案可能是正确且有用的,但如果您 include some explanation along with it 解释它如何帮助解决问题,则最好。如果有更改(可能不相关)导致它停止工作并且用户需要了解它曾经是如何工作的,这在未来变得特别有用。【参考方案3】:

您可能无法获得比这更多的 ruby​​-ish 了 :)

hash.values_at(*arr).reduce(:+)

【讨论】:

他们在争吵。

以上是关于使用数组中的键迭代哈希,并对结果求和的主要内容,如果未能解决你的问题,请参考以下文章

按键对哈希进行分组并对值求和

如何制作用户定义的矩形数组并对其进行迭代

如何对数组列表的元素求和?

迭代时无意中将键添加到哈希

在单次迭代中对两个数组求和

删除Ruby Hash中的键数组