[英]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, ... }
我已经尝试过sum
和inject
( 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.