如果我有一个内部表lt_itab
,其类型为werks matnr
的SORTED,并且此LOOP是否进行二进制搜索?
LOOP AT lt_itab INTO ls_itab
WHERE ( werks = space OR werks = '*' ).
或者OR
强制进行线性扫描吗?
答案 0 :(得分:2)
应该是线性扫描。
与src/main/resources/templates
运算符一样,@ResponseBody
只能在FILTER
中使用AND
加入,以确保它是二进制搜索。
对于散列键,恰好是每个键组件的一个比较表达式。 WHERE
允许的唯一关系运算符是op
,也是为了确保搜索为=
。
答案 1 :(得分:2)
来自官方文件:
如果在USING KEY之后没有指定显式表键名,则为订单 读取行的位置取决于表类别,如下所示:
标准表和排序表。行按升序行读取 主表索引中的数字。在每个循环传递中,系统 字段sy-tabix包含当前行的行号 主表索引。
散列表。按行的顺序处理行 插入表中,并按语句后使用的排序顺序 分类。在每个循环传递中,系统字段sy-tabix包含该值 0
循环继续运行,直到符合cond的所有表行 条件已被阅读或直到退出并附有声明。如果不 找到适当的行,或者如果内部表为空,则为循环 根本不运行。
循环不进行二分搜索,因为它不是搜索,而是循环,即迭代lt_itab
中的每一行。
https://help.sap.com/http.svc/rc/abapdocu_751_index_htm/7.51/en-US/abaploop_at_itab.htm