Skip to content

Variable Naming inside Reduce  #200

@ceedee666

Description

@ceedee666

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
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions