arrays - Ruby——通过键将子数组的值添加到数组中

标签 arrays ruby

所以我知道如何将数组中的所有值相加。

例如,[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/

相关文章:

c++ - 需要帮助将迷宫实现为二维数组 C++

php - 处理数组并插入mysql表中

ruby - 有什么方法可以改进 Ruby 中某些类的初始化方法吗?

ruby-on-rails - Heroku deplyoment Assets 预编译在 rails 6 上失败

python - 在 Python 中提取列表中 N 维数组的元素

iphone - 按 Objective C 中的子数组值对数组排序

java.util.Properties 多个值 ArrayIndexOutOfBoundsException

ruby - 使用 Ruby 将原始字符串转换为大端单词数组

ruby-on-rails - 捕获 HTML5 表单数据并将其转换为 PostgresQL 数据库

ruby-on-rails - 了解 Ruby on Rails ActiveRecord 模型访问器