一个哈希中有多个子哈希

P.F*_*.F. 6 ruby regex hash

我有一个哈希:

hash = {"a_1_a" => "1", "a_1_b" => "2", "a_1_c" => "3", "a_2_a" => "3",
        "a_2_b" => "4", "a_2_c" => "4"}
Run Code Online (Sandbox Code Playgroud)

获得以下子哈希的最佳方法是什么:

[{"a_1_a" => "1", "a_1_b" => "2", "a_1_c" => "3"},
 {"a_2_a" => "3", "a_2_b" => "4", "a_2_c" => "4"}]
Run Code Online (Sandbox Code Playgroud)

我希望它们基于正则表达式按键分组/^a_(\d+)/.我将在原始哈希中拥有50多个键/值对,因此如果有人有任何建议,动态的东西最有效.

tad*_*man 7

如果您只关心中间组件,可以使用它group_by来帮助您完成大部分工作:

hash.group_by do |k,v|
  k.split('_')[1]
end.values.map do |list|
  Hash[list]
end

# => [{"a_1_a"=>"1", "a_1_b"=>"2", "a_1_c"=>"3"}, {"a_2_a"=>"3", "a_2_b"=>"4", "a_2_c"=>"4"}]
Run Code Online (Sandbox Code Playgroud)

最后一步是提取分组列表并将它们组合回所需的哈希值.