개발을 처음 접하는 입장으로 이진탐색이 어떤 것인지 잘몰랐는데
정리가 잘된 블로그가 있어 해당 블로그 링크를 추가함 😀
SAP 기술 블로그
⭐
BINARY SEARCH
를 사용하기 위해서 전제조건
→ 반드시WITH KEY
로 찾을 필드 순서로 정렬을 시킬 것
1.ORDER BY
절을 통한 정렬
2.SORT [ITAB] BY [필드],[필드]...
: 해당 코드를 통한 정렬
💡 [ BINARY SEARCH 실습 ]
[ 문제 ]
[ 코드 ]
DATA : BEGIN OF gs_mat, matnr TYPE mara-matnr, mtart TYPE mara-mtart, mtbez TYPE t134t-mtbez, matkl TYPE mara-matkl, END OF gs_mat, gt_mat LIKE TABLE OF gs_mat, gt_mtbez TYPE TABLE OF t134t, gs_mtbez LIKE LINE OF gt_mtbez. CLEAR : gs_mat, gs_mtbez, gv_index. REFRESH : gt_mat, gt_mtbez. SELECT matnr mtart matkl INTO CORRESPONDING FIELDS OF TABLE gt_mat FROM mara. IF sy-subrc NE 0. " 주데이터가 gt_book 이므로 확인. WRITE : 'No data found.'. STOP. ENDIF. SELECT spras mtart mtbez INTO CORRESPONDING FIELDS OF TABLE gt_mtbez FROM t134t WHERE spras = sy-langu ORDER BY mtart. LOOP AT gt_mat INTO gs_mat. gv_index = sy-tabix. READ TABLE gt_mtbez INTO gs_mtbez WITH KEY mtart = gs_mat-mtart BINARY SEARCH. IF sy-subrc = 0. gs_mat-mtbez = gs_mtbez-mtbez. MODIFY gt_mat FROM gs_mat INDEX gv_index TRANSPORTING mtbez. CLEAR : gs_mat, gs_mtbez, gv_index. ENDIF. ENDLOOP. cl_demo_output=>display( gt_mat ).
❗ READ TABLE 이후에 반드시 sy-subrc 문을 추가하여 데이터를 읽었는지 확인이 필요