Woga Swoga wrote:
> I have an list of objects (Candy) and each object has two fields
> (Candy.color, Candy.taste). I would like to display the candies but
> group them based on the fields (display a header for each group). The
> problem is I don't know how many colors or tastes are in any particular
> list of candies.
>
> This is what I have for input:
>
> * Candy <-- hash list already pre-sorted by "group"
> * group <-- variable contains either "color" or "taste"
>
> Can anyone come up with a ruby code snipet that will use the "group"
> variable to extract out the group labels (unique values of the color or
> tate field), and then dump out the Candy list by group.
>
> Really appreciate your help!
>
require 'yaml'
@candies = [
{ :name => 'a', :color => "blue", :taste => "good" },
{ :name => 'b',:color => "blue", :taste => "yuck" },
{ :name => 'c',:color => "red", :taste => "ok" },
{ :name => 'd',:color => "blue", :taste => "yuck" },
{ :name => 'e',:color => "green", :taste => "good" },
{ :name => 'f',:color => "green", :taste => "yuck" }
]
def print_candies_by(group)
groups={}
@candies.each do |candy|
key = candy[group]
groups[key] = [] unless groups[key]
groups[key] << candy
end
puts "##########'"
puts YAML.dump groups
puts "##########'"
end
print_candies_by :taste
print_candies_by :color
----------------
##########'
---
good:
- :taste: good
:name: a
:color: blue
- :taste: good
:name: e
:color: green
yuck:
- :taste: yuck
:name: b
:color: blue
- :taste: yuck
:name: d
:color: blue
- :taste: yuck
:name: f
:color: green
ok:
- :taste: ok
:name: c
:color: red
##########'
##########'
---
green:
- :taste: good
:name: e
:color: green
- :taste: yuck
:name: f
:color: green
blue:
- :taste: good
:name: a
:color: blue
- :taste: yuck
:name: b
:color: blue
- :taste: yuck
:name: d
:color: blue
red:
- :taste: ok
:name: c
:color: red
##########'
--
Brad Phelan
http://xtargets.com