Разница двух наборов значений - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть набор значений: "foo", "bar", "blue".

У меня есть таблица, которая выглядит следующим образом:

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

Я хочу установитьзначения минус все доступные значения my_col.

[foo, bar, blue] minus [foo, bar]

Результат должен быть "синим".

Как это сделатьв ABAP?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

пара дополнительных примеров со стандартными таблицами:

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: если исходный набор и вкладка являются стандартной таблицей, вы можете просто зациклить исходный набор, а затем просмотреть значения таблицы

В этом случае полный поиск таблицы выполняется в таблице вкладок -> O (n) для поиска по вкладкам

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.

С уважением!

0 голосов
/ 27 февраля 2019

Вот, пожалуйста ...

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.

...