Reputation: 463
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
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