1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def group_by
  groups = []

  inject({}) do |grouped, element|
    index = yield(element)

    if group = grouped[index]
      group << element
    else
      group = [element]
      groups << [index, group]
      grouped[index] = group
    end

    grouped
  end

  groups
end if RUBY_VERSION < '1.9'