Ruby on rails 将散列的散列转换为单个散列
我的密码是Ruby on rails 将散列的散列转换为单个散列,ruby-on-rails,hash,Ruby On Rails,Hash,我的密码是 @logs= {-1=>{""=>{:source=>1, :time=>0, :skipped=>0, :mysql=>0, :es=>1}}} @logs.each_pair { |user_id , user_content| user_content.each_pair { |kwd , ser_content.each_pair { |kwd , kwd_content| h=kwd_content }} h={:tim
@logs= {-1=>{""=>{:source=>1, :time=>0, :skipped=>0, :mysql=>0, :es=>1}}}
@logs.each_pair { |user_id , user_content|
user_content.each_pair { |kwd , ser_content.each_pair { |kwd , kwd_content|
h=kwd_content
}}
h={:time_taken=>0, :skipped_count=>0, :mysql_count=>0, :es_count=>1, :source_count=>1}
用任何其他方法都要花很多时间
如果您要查找的是哈希值的值的总和,请帮助我:
@logs = {-1=>{""=>{:source=>1, :time=>0, :skipped=>0, :mysql=>0, :es=>1}}, -2=>{""=>{:source=>1, :time=>0, :skipped=>0, :mysql=>0, :es=>1}}}
# last part is from http://stackoverflow.com/a/4453690/178651
h = @logs.values.map{|i|i.values}.flatten.inject{|memo, el| memo.merge( el ){|k, old_v, new_v| old_v + new_v}}
将导致以下h值:
=> {:source=>2, :time=>0, :skipped=>0, :mysql=>0, :es=>2}
我不确定您在那里做什么-最终哈希的键与您开始使用的键不同-我也不确定您可能遇到的所有情况,但我怀疑hash.flatte可能会对您有所帮助。