gpt4 book ai didi

ruby - 用另一个哈希值填充哈希值

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:23 24 4
gpt4 key购买 nike

我有一个具有更多值的哈希值:

hash1 = {
:a => {
:foo => 435,
:bar => 3264
},
:b => {
:foo => 45234,
:bar => 2452
},
:c => {
:foo => 4352,
:bar => 4535
}
}

我需要将 a、b 和 c 的总和添加到新数组


hash2 = {
:a => total,
:b => total,
:c => total
}

到目前为止,我的尝试是这样的: hash2.each {|e,v| v = hash1[0]}

苦苦挣扎,所以我需要一些帮助!谢谢!

最佳答案

如果你使用的是 >= 2.4 的 Ruby 版本

hash2 = hash1.transform_values { |v| v.values.sum }
=>{:a=>3699, :b=>47686, :c=>8887}

感谢@3limin4t0r 和@Aleksei Matiushkin 的更新,为 Ruby 版本 < 2.4 提供了更简洁的方法,请参阅评论

hash2 = Hash[hash1.map { |k, v| [k, v.values.reduce(0, &:+)] }]
=> {:a=>3699, :b=>47686, :c=>8887}
# or if your prefer each_with_object
hash1.each_with_object({}) { |(k, v), h| h[k] = v.values.reduce(0, &:+) }
=> {:a=>3699, :b=>47686, :c=>8887}

原件留在此处进行对话

否则你可以这样做,可能有更快的方法但它有效

hash2 = {}
sum_vals = hash1.values.map{|h| h.values.inject(&:+)}
hash1.keys.each_with_index{|key, i| hash2[key] = sum_vals[i] }
hash2
=>{:a=>3699, :b=>47686, :c=>8887}

关于ruby - 用另一个哈希值填充哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57482146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com