abap - 在同一个表上循环时二进制搜索不起作用
问题描述
我正在制作一个导出带有一些数据 T_DATA [] 的表的函数。当我遍历一个内部表(T_ENTRIES[])并在 T_DATA[] 上使用二进制搜索时,有一部分。在循环之前, T_DATA[] 按我在 read 语句中使用的键排序。出于某种原因,即使在两个表中都有相同的键,读取也会失败很多时间。
如果我删除二进制搜索,它工作得很好。
这是在函数中声明为导出的表的常见问题吗?
因为当我将表 (T_DATA[]) 移动到不同的内部表并对其使用二进制搜索时,它工作正常。
谢谢!
SORT t_patient_list[] BY kunnr.
LOOP AT lt_cov_entry[] ASSIGNING FIELD-SYMBOL(<ls_cov_entry>).
READ TABLE t_patient_list[]
ASSIGNING FIELD-SYMBOL(<fs_patient_list>)
WITH KEY kunnr = <ls_cov_entry>-kunnr.
BINARY SEARCH.
IF sy-subrc <> 0.
CLEAR ls_patient_record.
MOVE-CORRESPONDING <ls_cov_entry> TO ls_patient_record.
APPEND ls_patient_record TO t_patient_list[].
ELSE.
<fs_patient_list>-hosp_type = <ls_cov_entry>-hosp_type.
ENDIF.
ENDLOOP.
解决方案
它不起作用,BINARY SEARCH
因为APPEND
破坏了订购。最好的解决方案是定义t_patient_list
为SORTED
by kunnr
。1
如果你不能这样做,你应该使用INSERT ... INDEX sy-tabix
而不是APPEND
,因为即使是失败的也READ TABLE
将它设置为正确的值:
SORT t_patient_list[] BY kunnr.
LOOP AT lt_cov_entry[] ASSIGNING FIELD-SYMBOL(<ls_cov_entry>).
READ TABLE t_patient_list[]
ASSIGNING FIELD-SYMBOL(<fs_patient_list>)
WITH KEY kunnr = <ls_cov_entry>-kunnr
BINARY SEARCH.
IF sy-subrc <> 0.
CLEAR ls_patient_record.
MOVE-CORRESPONDING <ls_cov_entry> TO ls_patient_record.
INSERT ls_patient_record INTO t_patient_list[] INDEX sy-tabix.
ELSE.
<fs_patient_list>-hosp_type = <ls_cov_entry>-hosp_type.
ENDIF.
ENDLOOP.
1)如果可以改成SORTED,还是需要把APPEND换成INSERT,只是去掉INDEX部分。
推荐阅读
- tibco - TIBCO BW 6.5 调试错误“限定符捆绑名称:Application_Name.module”,需要解决”
- julia - Julia 中是否有一个惰性和迭代的“地图”?
- sql - 在 BigQuery 上创建汇总表,连续聚合多个值
- angular - Angular6 自定义弹出窗口
- kubernetes - k8s - 具有服务依赖的部署
- php - How to get a word count of data in mysql and display in bar graph
- python - 请在我尝试使用 elif 关键字时出现此错误
- filter - 有条件地有效过滤大型数据集
- c++ - 在节点中使用原始指针,在树中使用 unique_ptr
- node-red - 从 Node-red 中的网页检索数据