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
where
hash_数据[:name]==“frontend”
,并创建一个键:
backend
where
hash_数据[: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考虑到你的反应结构和数据都不符合提议的要求,我会说这更像是“如果我背后有一只手,我在想什么数字”我也有远程思维融合能力。例如,您现在想到的是一个名为“‎塔蒂亚娜”。