代码之家  ›  专栏  ›  技术社区  ›  guettli

在abap中设置操作

  •  0
  • guettli  · 技术社区  · 6 年前

    我有一组值:“foo”、“bar”、“blue”。

    我有一张这样的桌子:

    ID | my_col
    -----------
     1 | foo
     2 | bar
    

    我希望设置值减去所有可用的值。

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

    结果应该是“蓝色”。

    在ABAP怎么做?

    0 回复  |  直到 6 年前
        1
  •  4
  •   Jagger    6 年前

    给你。。。

    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 ).
    

    但只能与 HASHED SORTED 桌子。

        2
  •  1
  •   manuel_b    6 年前

    标准表的两个附加示例:

    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是标准表,您可以简单地循环初始集,然后查看表值。

    在这种情况下,将在tab table中执行全表搜索->o(n)for 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.
    

    谨致问候!

    推荐文章