使用数组中的键迭代哈希,并对结果求和
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(:+)
【讨论】:
他们在争吵。以上是关于使用数组中的键迭代哈希,并对结果求和的主要内容,如果未能解决你的问题,请参考以下文章