所以我知道如何将数组中的所有值相加。
例如,[1,2,3,4]...的总和
[1,2,3,4].inject(&:+)
#=> 10
但是,我有一个数组数组,我想添加每个子数组的第一个元素相同的值。
# example
[["A", 10],["A", 5],["B", 5],["B", 5],["C", 15], ["C", 15]]
期望的输出:
"(A : 15) - (B : 10) - (C : 30)"
如有任何帮助,我们将不胜感激!
最佳答案
arr = [["A", 10],["A", 5],["B", 5],["B", 5],["C", 15], ["C", 15]]
h = arr.each_with_object(Hash.new(0)) { |(f,g),h| h[f] += g }
#=> {"A"=>15, "B"=>10, "C"=>30}
然后
h.map { |pair| "(%s : %s)" % pair }.join(" - ")
#=> "(A : 15) - (B : 10) - (C : 30)"
你可以这样组合:
arr.each_with_object(Hash.new(0)) { |(f,g),h| h[f] += g }.
map { |pair| "(%s : %s)" % pair }.join(" - ")
参见 Hash::new ,尤其是关于默认值的使用(此处为 0
)。
关于arrays - Ruby——通过键将子数组的值添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539439/