我有一系列哈希:
{hashed_data = [
{:name => "frontend", :session_total => 145, :byte => 54667},
{:name => "backend_stagging", :session_total => 546, :byte => 895747},
{:name => "backend", :session_total => 5468, :byte => 8957447},
{:name => "frontend", :session_total => 54, :byte => 67387}
]
我必须创建以下哈希。它不必排序。
hashed_data_modify = {
:frontend => {
:name => "frontend",
:summary => {:session_total => 546, :byte => 54667}
:backend => {
:name => "backend",
:details => {:session_total => 5468, :byte => 8957447},
:summary => { :name => "backend_stagging", :session_total => 546, :byte => 895747 }
}
即创建一个新密钥:frontend
其中hashed_data[:name] == "frontend"
并创建密钥:backend
其中hashed_data[:name] == "backend"
。 frontend
键仅包含frontend
数据的数据,backend
仅包含backend
。
我尝试了sorting_method
,这很糟糕:
hashed_data.select do |h|
if (h[:name] == "frontend") then
return hash = {
:frontend => {
:name => hashed_data[:name],
:details => [:session_total => hashed_data[:stot], :byte_in => hashed_data[:bin]]
}
} # :name => "frontend" etc.
(h[:name == "backend")
return hash = {
:backend => {:name => hashed_data[:name] #:name => "backend"}
} etc.
end
end
请帮忙。
答案 0 :(得分:3)
我猜这是你想要的。
hashed_data.group_by { |h| h[:name] }.
map { |_,v| v.max_by { |g| g[:session_total] } }
#=> [{:name=>"frontend", :session_total=>145, :byte=>54667},
# {:name=>"backend_stagging", :session_total=>546, :byte=>895747},
# {:name=>"backend", :session_total=>5468, :byte=>8957447}]
请注意,第一个计算如下。
hashed_data.group_by { |h| h[:name] }
#=> {"frontend"=>[{:name=>"frontend", :session_total=>145, :byte=>54667},
# {:name=>"frontend", :session_total=>54, :byte=>67387}],
# "backend_stagging"=>[{:name=>"backend_stagging", :session_total=>546,
# :byte=>895747}],
# "backend"=>[{:name=>"backend", :session_total=>5468, :byte=>8957447}]}
首先,你说你想要返回的数组的第一个元素是:
{:name=>"frontend", :session_total=>546, :byte=>54667}
我猜测:session_total
的值是一个错字,应该是145
。
其次,我假设当两个或多个哈希值具有相同的:name
值(此处只是"frontend"
)时,您希望保留值session_total
最大的哈希值(但这真是一个疯狂的猜测。)
第三,您似乎想要将值"backend_staging"
更改为键:summary
。如果是这样,这不是问题的核心,只是对那些给出答案的人造成麻烦,所以我忽视了这个要求。