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.
Sorting an Array by Frequency of Appearance | ||
---|---|---|
Code | Expected | Actual |
module Enumerable def sort_by_frequency histogram = inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash} sort_by { |x| [histogram[x], x] } end end [1,2,3,4,1,2,4,8,1,4,9,16].sort_by_frequency |
[3, 8, 9, 16, 2, 2, 1, 1, 1, 4, 4, 4] | [3, 8, 9, 16, 2, 2, 1, 1, 1, 4, 4, 4] |
[1,2] <=> [0,2] |
1 | 1 |
[1,2] <=> [1,2] |
0 | 0 |
[1,2] <=> [2,2] |
-1 | -1 |
[1,2] <=> [1,1] |
1 | 1 |
[1,2] <=> [1,3] |
-1 | -1 |
[1,2] <=> [1] |
1 | 1 |
[1,2] <=> [3] |
-1 | -1 |
[1,2] <=> [0,1,2] |
1 | 1 |
[1,2] <=> [] |
1 | 1 |
module Enumerable def sort_by_frequency_faster histogram = inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash} sort_by { |x| histogram[x] } end end [1,2,3,4,1,2,4,8,1,4,9,16].sort_by_frequency_faster |
[16, 8, 3, 9, 2, 2, 4, 1, 1, 4, 4, 1] | [16, 8, 3, 9, 2, 2, 4, 1, 1, 4, 4, 1] |
module Enumerable def sort_by_frequency_descending histogram = inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash} sort_by { |x| [histogram[x] * -1, x]} end end [1,2,3,4,1,2,4,8,1,4,9,16].sort_by_frequency_descending |
[1, 1, 1, 4, 4, 4, 2, 2, 3, 8, 9, 16] | [1, 1, 1, 4, 4, 4, 2, 2, 3, 8, 9, 16] |
module Enumerable def sort_distinct_by_frequency histogram = inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash } histogram.keys.sort_by { |x| [histogram[x], x] } end end [1,2,3,4,1,2,4,8,1,4,9,16].sort_distinct_by_frequency |
[3, 8, 9, 16, 2, 1, 4] | [3, 8, 9, 16, 2, 1, 4] |