在ABAP中找到两个数据集的差异?

在ABAP中找到两个数据集的差异?,abap,Abap,我有一套价值观:“foo”、“bar”、“blue” 我有一张这样的桌子: ID | my_col ----------- 1 | foo 2 | bar 我希望设置的值减去所有可用的我的列值 [foo,bar,blue]减去[foo,bar] 结果应该是“蓝色” 如何在ABAP中执行此操作?给您 REPORT YYY. TYPES string_table TYPE HASHED TABLE OF string WITH UNIQUE KEY TABLE_LINE. DATA(gt_

我有一套价值观:“foo”、“bar”、“blue”

我有一张这样的桌子:

ID | my_col
-----------
 1 | foo
 2 | bar
我希望设置的值减去所有可用的我的列值

[foo,bar,blue]减去[foo,bar]

结果应该是“蓝色”

如何在ABAP中执行此操作?

给您

REPORT YYY.

TYPES string_table TYPE HASHED TABLE OF string WITH UNIQUE KEY TABLE_LINE.

DATA(gt_set1) = VALUE string_table( ( `foo` ) ( `bar` ) ( `blue` ) ).
DATA(gt_set2) = VALUE string_table( ( `foo` ) ( `bar` ) ).

DATA(gt_set1_except_set2) = FILTER string_table( gt_set1 EXCEPT IN gt_set2 WHERE table_line = table_line ).

但是,仅适用于哈希表和排序表。

标准表的几个附加示例:

data: set type table of string, " initial set
      tab type table of string, " you table
      res type table of string. " the result

set = value #( ( `foo` ) ( `bar` ) ( `blue` ) ).
tab = value #( ( `foo` ) ( `bar` ) ).
选项1:假设初始集和制表符是标准表,您可以简单地循环初始集,然后查看表值

在这种情况下,将在tab table->O(n)中对tab search执行完整的表搜索

LOOP AT set into data(lv_set).
  read table tab from lv_set transporting no fields.
  check sy-subrc > 0.
  append lv_set to res.
ENDLOOP.
选项2:可以使用临时哈希表,如中所述

SE38->环境->性能示例(内部表的交集)


致以最良好的祝愿

使用标准表对集合进行建模相当糟糕,因为它们允许重复,如果存在重复项,则集合不再是集合,而是一个包。当然,哈希表是集合的更好选择。如果输入已以标准表格格式提供,则提供此选项。以下是“过滤器”的文档:
data: htab type hashed table of string with unique key table_line.

htab = tab. " use Hashed table as temporary working table

loop at set into lv_set.

  " fast table lookup accessing with unique key O(1)
  read table htab from lv_set transporting no fields.

  check sy-subrc > 0.
  append lv_set to res.
endloop.
free htab.