-
-
Notifications
You must be signed in to change notification settings - Fork 42
Closed
Description
Hi @larshp,
while working on the ITAB Aggreation exercise on Exercism I encounterd the follow issue.
The code below works on ABAP in the cloud.
CLASS zcl_itab_aggregation IMPLEMENTATION.
METHOD perform_aggregation.
LOOP AT initial_numbers INTO DATA(number)
GROUP BY number-group
ASSIGNING FIELD-SYMBOL(<group>).
DATA(group_members) = VALUE initial_numbers( FOR member IN GROUP <group> ( member ) ).
aggregated_data = VALUE #( BASE aggregated_data
( group = group_members[ 1 ]-group
count = lines( group_members )
sum = REDUCE i( INIT s = 0 FOR g IN group_members NEXT s = s + g-number )
min = REDUCE i( INIT min = 1000000 FOR g IN group_members NEXT min = COND #( WHEN g-number < min THEN g-number ELSE min ) )
max = REDUCE i( INIT max = 0 FOR g IN group_members NEXT max = COND #( WHEN g-number > max THEN g-number ELSE max ) )
average = REDUCE i( INIT s = 0 FOR g IN group_members NEXT s = s + g-number ) / lines( group_members )
) ).
ENDLOOP.
ENDMETHOD.
METHOD if_oo_adt_classrun~main.
DATA(numbers) = VALUE initial_numbers(
( group = 'A' number = 10 )
( group = 'B' number = 5 )
( group = 'A' number = 6 )
( group = 'C' number = 22 )
( group = 'A' number = 13 )
( group = 'C' number = 500 ) ).
DATA(aggregated_data) = NEW zcl_itab_aggregation( )->perform_aggregation( numbers ).
ENDMETHOD.
ENDCLASS.On Exercism I had to rename the variable names inside the REDUCE statments to be uniqe.
CLASS zcl_itab_aggregation IMPLEMENTATION.
METHOD perform_aggregation.
LOOP AT initial_numbers INTO DATA(number)
GROUP BY number-group
ASSIGNING FIELD-SYMBOL(<group>).
DATA(group_members) = VALUE initial_numbers( FOR member IN GROUP <group> ( member ) ).
aggregated_data = VALUE #( BASE aggregated_data
( group = group_members[ 1 ]-group
count = lines( group_members )
sum = REDUCE i( INIT s = 0 FOR g IN group_members NEXT s = s + g-number )
min = REDUCE i( INIT min = 1000000 FOR g1 IN group_members NEXT min = COND #( WHEN g1-number < min THEN g1-number ELSE min ) )
max = REDUCE i( INIT max = 0 FOR g2 IN group_members NEXT max = COND #( WHEN g2-number > max THEN g2-number ELSE max ) )
average = REDUCE i( INIT s1 = 0 FOR g3 IN group_members NEXT s1 = s1 + g-3number ) / lines( group_members )
) ).
ENDLOOP.
ENDMETHOD.Metadata
Metadata
Assignees
Labels
No labels