Abap 无循环计数itab组

Abap 无循环计数itab组,abap,Abap,我最近发现了循环中的命令 现在想象一下下面的例子: 我有一个itab,其中有一个列categories。我想知道有多少不同的类别。 使用上面链接的GROUPBY语句,我可以计算循环的执行次数。有没有一种不必循环的更简单的方法?下面是一个简短的示例代码,它包装在一个报告中,您可以在您的系统上尝试 REPORT Z_GROUP_COUNT. TYPES: BEGIN OF lty_st_for_reduce, categories TYPE C LENGTH 4,

我最近发现了循环中的命令

现在想象一下下面的例子:

我有一个itab,其中有一个列
categories
。我想知道有多少不同的类别。
使用上面链接的GROUPBY语句,我可以计算循环的执行次数。有没有一种不必循环的更简单的方法?

下面是一个简短的示例代码,它包装在一个报告中,您可以在您的系统上尝试

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.

不管怎样,你可以想象处理器必须迭代行来计算不同值的数量,所以我猜你的问题更多的是关于最短的写入方法…毫无疑问,你应该使用REDUCE…用于GROUP…GROUP BY…,但是如果你能提供你的代码片段来帮助回答问题,那会有很大帮助。你能提供现有的代码吗?看起来不错,一旦我在我的代码中成功地测试了它,我会检查它作为答案:)所以看起来
Reduce
就是我想要的,我知道这样的东西一定存在于某个地方:我看不到任何性能差异。这也是一个循环,只是以一种奇特的方式。:)