首页 > 解决方案 > 从 ruby​​ 中的哈希数组中获取唯一键值以执行分组

问题描述

我有一个数组如下:

arr = [
  [
    { :pm => 38, :scs => 5, :bg => "#66ffff", :impact => nil, :focus => 9 },
    { :pm => 38, :scs => 6, :bg => "#66ffff", :impact => 2, :focus => 9 },
    { :pm => 38, :scs => 7, :bg => "#66ffff", :impact => nil, :focus => 9 }
  ],
  [
    { :pm => 26, :scs => 5, :bg => "#ffe18b", :impact => 2, :focus => 2 },
    { :pm => 26, :scs => 6, :bg => "#ffe18b", :impact => 1, :focus => 2 },
    { :pm => 26, :scs => 7, :bg => "#ffe18b", :impact => nil, :focus => 2 }
  ],
  [
    { :pm => 39, :scs => 5, :bg => "#ffe18b", :impact => nil, :focus => 2 },
    { :pm => 39, :scs => 6, :bg => "#ffe18b", :impact => nil, :focus => 2 },
    { :pm => 39, :scs => 7, :bg => "#ffe18b", :impact => nil, :focus => 2 }
  ],
  [
    { :pm => 25, :scs => 5, :bg => "#ffffe5", :impact => 1, :focus => 4 },
    { :pm => 25, :scs => 6, :bg => "#ffffe5", :impact => 2, :focus => 4 },
    { :pm => 25, :scs => 7, :bg => "#ffffe5", :impact => 1, :focus => 4 }
  ],
  [
    { :pm => 34, :scs => 5, :bg => "#ffffe5", :impact => nil, :focus => 4 },
    { :pm => 34, :scs => 6, :bg => "#ffffe5", :impact => nil, :focus => 4 },
    { :pm => 34, :scs => 7, :bg => "#ffffe5", :impact => nil, :focus => 4 }
  ],
  [
    { :pm => 23, :scs => 5, :bg => "#ffffe5", :impact => 2, :focus => 4 },
    { :pm => 23, :scs => 6, :bg => "#ffffe5", :impact => 1, :focus => 4 },
    { :pm => 23, :scs => 7, :bg => "#ffffe5", :impact => 1, :focus => 4 }
  ],
  [
    { :pm => 32, :scs => 5, :bg => "#ffffe5", :impact => nil, :focus => 4 },
    { :pm => 32, :scs => 6, :bg => "#ffffe5", :impact => 2, :focus => 4 },
    { :pm => 32, :scs => 7, :bg => "#ffffe5", :impact => 1, :focus => 4 }
  ],
  [
    { :pm => 17, :scs => 5, :bg => "#ffffe5", :impact => nil, :focus => 4 },
    { :pm => 17, :scs => 6, :bg => "#ffffe5", :impact => 2, :focus => 4 },
    { :pm => 17, :scs => 7, :bg => "#ffffe5", :impact => 1, :focus => 4 }
  ]
]

我需要:focus唯一地获取键的值,以便根据焦点值对上述列表进行分组。

标签: arraysruby-on-railsrubyhash

解决方案


这会做吗?

arr.flatten.group_by {|elem| elem[:focus]}

如果您只需要 uniqfocus值,

arr.flatten.map {|elem| elem[:focus] }.uniq

推荐阅读