不循环地计算 itab 组
Counting itab groups without a loop
我最近发现了循环中的 GROUP BY 命令。
现在想象下面的例子:
我有一个包含 categories
列的 itab。我想知道有多少种不同的类别。
使用上面链接的 GROUP BY 语句,我可以计算循环执行的次数。有没有更简单的不用循环的方法?
这是一个包含在报告中的简短示例代码,您可以在您的系统上试用。
REPORT Z_GROUP_COUNT.
TYPES: BEGIN OF lty_st_for_reduce,
categories TYPE C LENGTH 4,
END OF lty_st_for_reduce.
DATA: lt_for_reduce TYPE STANDARD TABLE OF lty_st_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'OBJC' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'OBJC' ) TO lt_for_reduce.
DATA(lv_categories_count) = REDUCE i( INIT count = 0
FOR GROUPS categories OF entry IN lt_for_reduce
GROUP BY ( categories = entry-categories )
NEXT count = count + 1 ).
" Will output `2`.
WRITE: lv_categories_count.
我最近发现了循环中的 GROUP BY 命令。
现在想象下面的例子:
我有一个包含 categories
列的 itab。我想知道有多少种不同的类别。
使用上面链接的 GROUP BY 语句,我可以计算循环执行的次数。有没有更简单的不用循环的方法?
这是一个包含在报告中的简短示例代码,您可以在您的系统上试用。
REPORT Z_GROUP_COUNT.
TYPES: BEGIN OF lty_st_for_reduce,
categories TYPE C LENGTH 4,
END OF lty_st_for_reduce.
DATA: lt_for_reduce TYPE STANDARD TABLE OF lty_st_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'OBJC' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'ABAP' ) TO lt_for_reduce.
APPEND VALUE #( categories = 'OBJC' ) TO lt_for_reduce.
DATA(lv_categories_count) = REDUCE i( INIT count = 0
FOR GROUPS categories OF entry IN lt_for_reduce
GROUP BY ( categories = entry-categories )
NEXT count = count + 1 ).
" Will output `2`.
WRITE: lv_categories_count.