2

私は2つの内部テーブルタイプを持っていますTYPE STANDARD TABLE OF string

最初のテーブルにはデータが含まれています

| K1 |  K2 | K3 |

2 番目のテーブルにはデータが含まれています

| K1 | K2 |

ABAP で、2 番目のテーブル エントリが最初のテーブルに完全に存在するかどうかを確認する最速の方法は何ですか? 多分いくつかのインライン関数?

DATA lt_current_values TYPE stringtab.
DATA lt_previous_values TYPE stringtab.

APPEND 'K1' TO lt_previous_values.
APPEND 'K2' TO lt_previous_values.
APPEND 'K3' TO lt_previous_values.

APPEND 'K1' TO lt_current_values.
APPEND 'K2' TO lt_current_values.

DATA lv_count TYPE i.
LOOP AT lt_current_values INTO DATA(ls_cur).
  READ TABLE lt_previous_values TRANSPORTING NO FIELDS WITH KEY table_line = ls_cur.
  IF sy-subrc = 0.
    lv_count += 1.
  ENDIF.
ENDLOOP.

IF lv_count = LINES( lt_current_values ).
  " present => current_table values are already present in previous_table
ENDIF.
4

2 に答える 2

2

解決策は、ハッシュされたテーブルを一時的に使用することですFILTER

DATA lt_current_values TYPE stringtab.
FIELD-SYMBOLS <ls_current_values> LIKE LINE OF lt_current_values.
DATA lt_previous_values TYPE stringtab.
FIELD-SYMBOLS <ls_previous_values> LIKE LINE OF lt_previous_values.
DATA lth_current_values LIKE HASHED TABLE OF <ls_current_values> WITH UNIQUE KEY table_line.
DATA lth_previous_values LIKE HASHED TABLE OF <ls_previous_values> WITH UNIQUE KEY table_line.

lt_previous_values = VALUE #( ( `K1` ) ( `K2` ) ( `K3` ) ).
lt_current_values = VALUE #( ( `K1` ) ( `K2` ) ).

lth_current_values = lt_current_values.
lth_previous_values = lt_previous_values.

DATA(lt_difference) = FILTER #( lth_current_values EXCEPT IN lth_previous_values WHERE table_line = table_line ).

IF lines( lt_difference ) = 0.
  BREAK-POINT.
  " present => current_table values are already present in previous_table
ENDIF.
于 2020-11-25T17:16:15.343 に答える