jissy
jissy

Reputation: 463

get unique key values from an array of array of hash in ruby to perform grouping

I have an array as below:

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 }
  ]
]

I need to get the value of the key :focus uniquely for grouping the above list based on the focus value.

Upvotes: 0

Views: 213

Answers (1)

shajin
shajin

Reputation: 3264

Does this would do?

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

If you just need the uniq focus values,

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

Upvotes: 2

Related Questions