Arrays 如果我有一个大的哈希表,如何创建一个新的哈希表
我有一个哈希数组:Arrays 如果我有一个大的哈希表,如何创建一个新的哈希表,arrays,ruby,hash,Arrays,Ruby,Hash,我有一个哈希数组: {hashed_data = [ {:name => "frontend", :session_total => 145, :byte => 54667}, {:name => "backend_stagging", :session_total => 546, :byte => 895747}, {:name => "backend", :session_total => 5468, :byte => 895
{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
wherehash_数据[:name]==“frontend”
,并创建一个键:backend
wherehash_数据[:name]==“backend”
。前端
键仅包含前端
数据和后端
数据,仅包含后端
我尝试了我的排序方法
,它不好:
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
请帮忙。我猜这就是你想要的
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\u total
的值是一个打字错误,应该是145
其次,我假设当两个或两个以上的哈希值相同时,:name
(此处仅为“frontend”
),您希望保留值session_total
最大的一个(但这是一个真正的猜测)
第三,您似乎希望将值
“backend\u staging”
更改为键:summary
。如果是这样的话,那就不是问题的核心,对那些给出答案的人来说只是个麻烦,所以我忽略了这个要求。你试过什么吗?背后的逻辑是什么?例如,当原始散列既没有此值,也没有总计到此值时,为什么frontend/summary/session_bytes==546
?为什么在:frontend
中有摘要
子哈希,在:backend
中有详细信息
,但在:backend\u staging
中没有。请解释为什么需要合并散列值以及如何合并散列值。除了更好地解释您想要做什么(通过编辑问题),请仔细检查hashed_data
中的值以及您想要构建的散列值。您似乎已经发布了问题并走开了,假设读者不需要澄清。不用说,这是一个错误的假设。现在,在你发布这个问题将近一个小时后,有三票赞成结束它,因为它还不清楚。今后,请花更多的精力写一个清晰完整的问题,并留下来回复评论。若要设置代码,请缩进四个空格或(更好)根据需要设置格式,然后选择代码并单击代码上方编辑栏中的{}
。Ruby的标准缩进是两个空格then
是可选的,如果,通常不与一起使用。我想创建散列_数据_修改键:frontend where hash_data[:name]=“frontend”,并创建键:backend where hash_data[:name]=“backend”。在黑暗中分离dataWow wild shot和绿色复选标记以启动。我不知道你是如何把这个问题和期望的回答解释成任何事情的all@engineersmnky,这与“给定序列的前五个值,序列中接下来的三个值是什么?”没有太大区别@CarySwoveland考虑到你的反应结构和数据都不符合提议的要求,我会说这更像是“如果我背后有一只手,我在想什么数字”我也有远程思维融合能力。例如,您现在想到的是一个名为“塔蒂亚娜”。