ABAP READ TABLE使用BINARY SEARCH如题,read table使用binary search,with key有多个字段的时候,寻找数据的内部逻辑是怎样的比如有内表(按A,B已排好序)T_DATAA B C1 1 11 2 22 1 32 2 42 3 53

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 11:30:24
ABAPREADTABLE使用BINARYSEARCH如题,readtable使用binarysearch,withkey有多个字段的时候,寻找数据的内部逻辑是怎样的比如有内表(按A,B已排好序)T_

ABAP READ TABLE使用BINARY SEARCH如题,read table使用binary search,with key有多个字段的时候,寻找数据的内部逻辑是怎样的比如有内表(按A,B已排好序)T_DATAA B C1 1 11 2 22 1 32 2 42 3 53
ABAP READ TABLE使用BINARY SEARCH
如题,read table使用binary search,with key有多个字段的时候,寻找数据的内部逻辑是怎样的
比如有内表(按A,B已排好序)
T_DATA
A B C
1 1 1
1 2 2
2 1 3
2 2 4
2 3 5
3 1 6
3 2 7
3 3 8
现在用如下语句查找
READ TABLE T_DATA INTO W_DATA WITH KEY A='2' B = '3' BINARY SEARCH.
可以找到C='5'的这条数据
现在的问题是,我想知道具体的内部逻辑是怎样的,我有两个猜想.
1.先找A='2',再找B='3'?两次都是二分法查找?但第一次二分法如何能找出多条数据?
2.直接将A和B合并,条件转换成AB='23',这样就算多个字段,也符合二分法查找方式,比较偏向这种.
有谁来证实下,或者知道正确的内部逻辑,非常感谢.

ABAP READ TABLE使用BINARY SEARCH如题,read table使用binary search,with key有多个字段的时候,寻找数据的内部逻辑是怎样的比如有内表(按A,B已排好序)T_DATAA B C1 1 11 2 22 1 32 2 42 3 53

对于内表的二分查找,与对内表的排序一样,都是先对比指定的第一个字段,再对比指定的第二个字段...直到对比完指定的第n个字段.

所以,猜想1是正确的逻辑.借你的例子,它是先二分查找找出所有A='2'的数据,然后再从筛选得出的数据中去二分查找B='3'的数据,如果有多条满足条件的数据,则返回内表中满足条件的索引最小的一条.

在做二分查找之前,需要先对内表以查找的字段顺序进行升序排序,也就是说,在你的例子中用二分查找之前要对内表按A、B的顺序进行排序,即

SORT T_DATA[] BY A B ASCENDING.

否则不一定能查找到正确的确结果