让我们说,我有这个数组
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
。有什么建议吗?
答案 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(:+)