Changeset 8604
- Timestamp:
- 01/09/08 08:37:36 (6 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activesupport/lib/active_support/core_ext/enumerable.rb
r8516 r8604 16 16 # "2006-02-23 -> Transcript" 17 17 def group_by 18 inject([]) do |groups, element| 19 value = yield(element) 20 if (last_group = groups.last) && last_group.first == value 21 last_group.last << element 18 groups = [] 19 20 inject({}) do |grouped, element| 21 index = yield(element) 22 23 if group = grouped[index] 24 group << element 22 25 else 23 groups << [value, [element]] 26 group = [element] 27 groups << [index, group] 28 grouped[index] = group 24 29 end 25 groups 30 31 grouped 26 32 end 33 34 groups 27 35 end if RUBY_VERSION < '1.9' 28 36 … … 65 73 end 66 74 end 67 68 75 end trunk/activesupport/test/core_ext/enumerable_test.rb
r8563 r8604 16 16 end 17 17 18 objects.group_by {|object| object.name}.each do |name, group| 19 assert group.all? {|person| person.name == name} 18 grouped = objects.group_by { |object| object.name } 19 20 grouped.each do |name, group| 21 assert group.all? { |person| person.name == name } 20 22 end 23 24 assert_equal objects.uniq.map(&:name), grouped.map { |name, group| name } 21 25 end 22 26