@@ -272,13 +272,21 @@ var $Sequence = Sequence;
272
272
}
273
273
return this . filter ( predicate , thisArg ) . count ( ) ;
274
274
} ,
275
- countBy : function ( mapper , context ) {
276
- var seq = this ;
277
- return OrderedMap . empty ( ) . withMutations ( ( function ( map ) {
278
- seq . forEach ( ( function ( value , key , collection ) {
279
- map . update ( mapper ( value , key , collection ) , increment ) ;
280
- } ) ) ;
275
+ countBy : function ( grouper , context ) {
276
+ var $__0 = this ;
277
+ var groupMap = { } ;
278
+ var groups = [ ] ;
279
+ this . forEach ( ( function ( v , k ) {
280
+ var g = grouper . call ( context , v , k , $__0 ) ;
281
+ var h = hash ( g ) ;
282
+ if ( ! groupMap . hasOwnProperty ( h ) ) {
283
+ groupMap [ h ] = groups . length ;
284
+ groups . push ( [ g , 1 ] ) ;
285
+ } else {
286
+ groups [ groupMap [ h ] ] [ 1 ] ++ ;
287
+ }
281
288
} ) ) ;
289
+ return $Sequence ( groups ) . fromEntrySeq ( ) ;
282
290
} ,
283
291
concat : function ( ) {
284
292
for ( var values = [ ] ,
@@ -557,8 +565,8 @@ var $Sequence = Sequence;
557
565
skipUntil : function ( predicate , thisArg ) {
558
566
return this . skipWhile ( not ( predicate ) , thisArg ) ;
559
567
} ,
560
- groupBy : function ( mapper , context ) {
561
- return groupByFactory ( this , mapper , context , true ) ;
568
+ groupBy : function ( grouper , context ) {
569
+ return groupByFactory ( this , grouper , context , true ) ;
562
570
} ,
563
571
sort : function ( comparator ) {
564
572
return this . sortBy ( valueMapper , comparator ) ;
@@ -754,8 +762,8 @@ var $IndexedSequence = IndexedSequence;
754
762
skipWhile : function ( predicate , thisArg ) {
755
763
return skipWhileFactory ( this , predicate , thisArg , false ) ;
756
764
} ,
757
- groupBy : function ( mapper , context ) {
758
- return groupByFactory ( this , mapper , context , false ) ;
765
+ groupBy : function ( grouper , context ) {
766
+ return groupByFactory ( this , grouper , context , false ) ;
759
767
} ,
760
768
sortBy : function ( mapper , comparator ) {
761
769
comparator = comparator || defaultComparator ;
@@ -917,9 +925,6 @@ function returnTrue() {
917
925
function returnThis ( ) {
918
926
return this ;
919
927
}
920
- function increment ( value ) {
921
- return ( value || 0 ) + 1 ;
922
- }
923
928
function filterFactory ( sequence , predicate , context , useKeys ) {
924
929
var filterSequence = sequence . __makeSequence ( ) ;
925
930
filterSequence . __iterateUncached = function ( fn , reverse , reverseIndices ) {
@@ -935,19 +940,21 @@ function filterFactory(sequence, predicate, context, useKeys) {
935
940
} ;
936
941
return filterSequence ;
937
942
}
938
- function groupByFactory ( seq , mapper , context , useKeys ) {
939
- var groups = OrderedMap . empty ( ) . withMutations ( ( function ( map ) {
940
- seq . forEach ( ( function ( value , key , collection ) {
941
- var groupKey = mapper . call ( context , value , key , seq ) ;
942
- var group = map . get ( groupKey ) ;
943
- if ( ! group ) {
944
- group = [ ] ;
945
- map . set ( groupKey , group ) ;
946
- }
947
- group . push ( useKeys ? [ key , value ] : value ) ;
948
- } ) ) ;
943
+ function groupByFactory ( seq , grouper , context , useKeys ) {
944
+ var groupMap = { } ;
945
+ var groups = [ ] ;
946
+ seq . forEach ( ( function ( v , k ) {
947
+ var g = grouper . call ( context , v , k , seq ) ;
948
+ var h = hash ( g ) ;
949
+ var e = useKeys ? [ k , v ] : v ;
950
+ if ( ! groupMap . hasOwnProperty ( h ) ) {
951
+ groupMap [ h ] = groups . length ;
952
+ groups . push ( [ g , [ e ] ] ) ;
953
+ } else {
954
+ groups [ groupMap [ h ] ] [ 1 ] . push ( e ) ;
955
+ }
949
956
} ) ) ;
950
- return groups . map ( useKeys ? ( function ( group ) {
957
+ return Sequence ( groups ) . fromEntrySeq ( ) . map ( useKeys ? ( function ( group ) {
951
958
return Sequence ( group ) . fromEntrySeq ( ) ;
952
959
} ) : ( function ( group ) {
953
960
return Sequence ( group ) ;
0 commit comments