繁体   English   中英

如何对 hash 的单个键中的值数组求和?

[英]How to sum an array of values within a single key of a hash?

应该很快:在别处找不到确切的查询:

我有一个 hash 的形式:

{"Chicago"=>[35.0, 5.0, 7.0], "Austin"=>[12.0, 42.0, 15.0, 8.0], ... }

我只是想将哈希值(数组)中的数字相加成为:

{"Chicago"=> 47.0, "Austin"=> 77.0, ... }

我已经尝试过suminject ( hash.values.each.inject(0) { |sum, x| sum + x}等) 并且遇到“数组不能被强制转换为整数”异常,我不确定go 的正确方法关于这个,虽然问的好像比较简单!

看看Hash#transform_values 您也可以将inject替换为Array#sum

hash.transform_values(&:sum)

按照您原来的方法,这是一个完整的工作解决方案——看起来您的思路是正确的!

hash = {"Chicago"=>[35.0, 5.0, 7.0], "Austin"=>[12.0, 42.0, 15.0, 8.0]

hash.map { |city, values| [city, values.inject(0){ |sum, value| sum + value}] }.to_h

唷,但这看起来有点复杂! 对于初学者来说幸运的是,您可以使用命名运算符的符号调用inject以将其缩短一点:

hash.map { |city, values| [city, values.inject(:+)] }.to_h

甚至更好的是,在这种情况下,您可以调用Array#sum来实现相同的目的:

hash.map { |city, values| [city, values.sum] }.to_h

不过,我们仍然可以做得更好。 对于这个非常常见的用例,只需要转换 hash 值,同时保留整体 hash 结构,现代transform_values有一个内置方法,称为...

hash.transform_values { |values| values.sum }

最后,最后一次简化这个:

hash.transform_values(&:sum)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM