Data structures 按值对照另一个结构检查结构

Data structures 按值对照另一个结构检查结构,data-structures,dynamic,abap,Data Structures,Dynamic,Abap,我有一段动态编码。我需要检查一个键结构是否在另一个结构中。不检查每个字段的值(如果可能) 逻辑上应该是这样的: IF ls_keys IN ls_data_struc. "do stuff ENDIF. 是的,我知道编码片段不起作用,但我认为这最好地说明了我的要求 TYPES: BEGIN OF tys_keys, matnr TYPE matnr, vkorg TYPE vkorg, END OF tys_keys. TYPES: BEGI

我有一段动态编码。我需要检查一个键结构是否在另一个结构中。不检查每个字段的值(如果可能)

逻辑上应该是这样的:

IF ls_keys IN ls_data_struc.
  "do stuff
ENDIF.
是的,我知道编码片段不起作用,但我认为这最好地说明了我的要求

TYPES: BEGIN OF tys_keys,
        matnr TYPE matnr,
        vkorg TYPE vkorg,
       END OF tys_keys.

TYPES: BEGIN OF tys_data,
        matnr TYPE matnr,
        vkorg TYPE vkorg,
        mtpos TYPE mtpos,
       END OF tys_data.

DATA: ls_keys TYPE tys_keys,
      ls_data_struc TYPE tys_data.
应该起作用的示例:

ls_keys-matnr = '009988776655443322'.
ls_keys-vkorg = '0001'.

ls_data_struc-matnr = '009988776655443322'.
ls_data_struc-vkorg = '0001'.
ls_data_struc-mtpos = 'ALEN'.

IF ls_keys IN ls_data_struc.
  "do something
ENDIF.
不应该起作用的示例:

ls_keys-matnr = '112233445566778899'.
ls_keys-vkorg = '3145'.

ls_data_struc-matnr = '009988776655443322'.
ls_data_struc-vkorg = '0001'.
ls_data_struc-mtpos = 'ALEN'.

IF ls_keys IN ls_data_struc.
  "do something
ENDIF.

要仅比较两个结构的组件值,最简单的解决方案是使用构造函数运算符:


如果字段的布局与问题中的代码片段类似

If ls_keys = ls_data_struc(22). 
  “Do something
Endif.

也应该有效。它也可能比使用相应的操作符更快,但适用性更有限

这是一个可能的解决方案,但我认为硬编码字段长度之和对于可维护性不是很好(如果结构中有非字符组件或顺序不相同,则不起作用)。这只是为了提高性能(在我的系统中,基于100.000次迭代,子字符串:35256.00<对应:78607.00)。我同意,在许多情况下,您的答案更好。因此,我在回答中提出了“更有限的适用性”。也就是说,有时您需要检查每一盎司的性能,坦率地说,对于不太可能改变的表,可维护性风险相当低。
If ls_keys = ls_data_struc(22). 
  “Do something
Endif.