如何在二维数组中对特定值求和

时间:2015-05-07 06:45:06

标签: arrays ruby

让我们说,我有这个数组

arr = [["Ready", 6], ["Draft", 3], ["To Repair", 4], ["Closed", 2]]

我的目标是以百分比而非绝对值显示这些数据。这是我想要的:

[["Ready", 0.5], ["Draft", 0.2], ["To Repair", 0.3], ["Closed", 0.2]]

这意味着我必须先得到这笔钱。我试图做的是:

arr.inject {|sum, a| sum + a[1]}

但这会返回TypeError Exception: no implicit conversion of Fixnum into Array。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果要添加数字,则应访问索引为1的元素,并为sum提供初始值。

arr.inject(0) {|sum, a| sum + a[1]}
# => 15

答案 1 :(得分:1)

a[0]是一个字符串;你想要a[1]。从sum = 0开始而不是从sum = ["Ready, 6]开始是好的 - 所以你需要参数inject

sum = arr.inject(0) { |sum, a| sum + a[1] }.to_f
arr.each { |el| el[1] /= sum }
# => [["Ready", 0.4], ["Draft", 0.2], ["To Repair", 0.26666666666666666], ["Closed", 0.13333333333333333]] 

答案 2 :(得分:1)

懒惰(但不是最有效)的方式是:

arr.map(&:last).inject(:+)