This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Building a Histogram
CodeExpectedActual
```module Enumerable
def to_histogram
inject(Hash.new(0)) { |h, x| h[x] += 1; h}
end
end
[1, 2, 2, 2, 3, 3].to_histogram```
{1=>1, 2=>3, 3=>2} {1=>1, 2=>3, 3=>2}
`["a", "b", nil, "c", "b", nil, "a"].to_histogram`
{"a"=>2, "b"=>2, "c"=>1, nil=>2} {"a"=>2, "b"=>2, "c"=>1, nil=>2}
`"Aye\nNay\nNay\nAbstaining\nAye\nNay\nNot Present\n".to_histogram`
{"Abstaining\n"=>1, "Nay\n"=>3, "Not Present\n"=>1, "Aye\n"=>2} {"Abstaining\n"=>1, "Nay\n"=>3, "Not Present\n"=>1, "Aye\n"=>2}
```survey_results = { "Alice" => :red, "Bob" => :green, "Carol" => :green,
"Mallory" => :blue }
survey_results.values.to_histogram```
{:red=>1, :green=>2, :blue=>1} {:red=>1, :green=>2, :blue=>1}
```def draw_graph(histogram, char="#")
pairs = histogram.keys.collect { |x| [x.to_s, histogram[x]] }.sort
largest_key_size = pairs.max { |x,y| x[0].size <=> y[0].size }[0].size
pairs.inject("") do |s,kv|
s << "#{kv[0].ljust(largest_key_size)} |#{char*kv[1]}\n"
end
end
puts draw_graph(survey_results.values.to_histogram)```
```blue  |#
green |##
red   |#```
```blue  |#
green |##
red   |#```
```random = []
100.times { random << rand(10) }
puts draw_graph(random.to_histogram)```
```0 |############
1 |########
2 |#######
3 |#########
4 |##########
5 |#############
6 |###############
7 |########
8 |#######
9 |###########```
```0 |############
1 |########
2 |#######
3 |#########
4 |##########
5 |#############
6 |###############
7 |########
8 |#######
9 |###########```