Abap 基于where条件筛选内部表的最有效方法

Abap 基于where条件筛选内部表的最有效方法,abap,internal-tables,Abap,Internal Tables,到目前为止,我一直使用它从内部表中获取特定行: LOOP AT it_itab INTO ls_itab WHERE place = 'NEW YORK'. APPEND ls_itab TO it_anotherItab INSERT ls_itab INTO TABLE it_anotherItab ENDLOOP. 然而,7.40似乎减少了和过滤器的线路。筛选器需要排序或哈希键,在我的示例中不是这样。所以我想这只是个问题 DATA(it_anotherItab) = VA

到目前为止,我一直使用它从内部表中获取特定行:

LOOP AT it_itab INTO ls_itab WHERE place = 'NEW YORK'.
    APPEND ls_itab TO it_anotherItab
    INSERT ls_itab INTO TABLE it_anotherItab
ENDLOOP.
然而,7.40似乎减少了和过滤器的线路。筛选器需要排序或哈希键,在我的示例中不是这样。所以我想这只是个问题

DATA(it_anotherItab) = VALUE t_itab( FOR wa IN it_itab WHERE ( place = 'LONDON' )

                         ( col1 = wa-col2 col2 = wa-col3 col3 = ....... ) ).
问题是:

  • 两人真的在做同样的事吗?第二个是追加还是插入
  • 在第二个变体中,是否可以使用整个结构而不指定每一列?就像刚刚(wa)
  • 第二个例子更快吗

根据您的意见,您还可以在标准表上定义已排序的辅助键。请看下面的示例:

TYPES:
    BEGIN OF t_line_s,
        name1 TYPE name1,
        name2 TYPE name2,
        ort01 TYPE ort01,
    END OF t_line_s,

    t_tab_tt TYPE STANDARD TABLE OF t_line_s
        WITH NON-UNIQUE EMPTY KEY
        WITH NON-UNIQUE SORTED KEY place_key COMPONENTS ort01. "<<<

DATA(i_data) = VALUE t_tab_tt( ). " fill table with test data

DATA(i_london_only) = FILTER #( 
    i_data 
    USING KEY place_key  " we want to use the secondary key
    WHERE ort01 = CONV #( 'london' ) " stupid conversion rules...
).

" i_london_only contains the filtered entries now
类型:
从t_线开始,
名称1类型名称1,
名称2类型名称2,
ort01型ort01,
t_线的末端,
t_tab_tt型t_线标准表
使用非唯一的空密钥

具有非唯一排序的键位置\键组件ort01。“根据您的评论,您还可以在标准表上定义一个已排序的辅助键。请看下面的示例:

TYPES:
    BEGIN OF t_line_s,
        name1 TYPE name1,
        name2 TYPE name2,
        ort01 TYPE ort01,
    END OF t_line_s,

    t_tab_tt TYPE STANDARD TABLE OF t_line_s
        WITH NON-UNIQUE EMPTY KEY
        WITH NON-UNIQUE SORTED KEY place_key COMPONENTS ort01. "<<<

DATA(i_data) = VALUE t_tab_tt( ). " fill table with test data

DATA(i_london_only) = FILTER #( 
    i_data 
    USING KEY place_key  " we want to use the secondary key
    WHERE ort01 = CONV #( 'london' ) " stupid conversion rules...
).

" i_london_only contains the filtered entries now
类型:
从t_线开始,
名称1类型名称1,
名称2类型名称2,
ort01型ort01,
t_线的末端,
t_tab_tt型t_线标准表
使用非唯一的空密钥

使用非唯一的排序关键位置\关键组件ort01。“
REDUCE
似乎无法解决您在这里面临的问题。为什么您不能使用
过滤器
?您只需通过第二个键扩展表类型即可。@lausek,但在我的情况下,place不是唯一键,也不是排序表。假设我想从一个内部表格(标准表格)中获取所有条目,其中地点是伦敦。这是否回答了您的问题
REDUCE
似乎无法解决您在这里面临的问题。为什么您不能使用
过滤器
?您只需通过第二个键扩展表类型即可。@lausek,但在我的情况下,place不是唯一键,也不是排序表。假设我想从一个内部表格(标准表格)中获取所有条目,其中地点是伦敦。这是否回答了您的问题?