首页 > 其他分享 >ABAP开发学习——二分法查找问题记录

ABAP开发学习——二分法查找问题记录

时间:2024-11-26 17:02:28浏览次数:12  
标签:lv field2 field1 lt 二分法 ABAP 查找 TYPE

在ABAP中使用二分法查找之前需要注意内表需要提前经过排序,尤其注意根据哪个字段使用BINARY SEARCH,就要针对哪个字段进行排序。使用两个及以上字段更要注意这一点,不可以用A B排序,再用B C去二分法查找,这样通常是读不到所需数据的。

TYPES: BEGIN OF ty_data,
         field1 TYPE i,
         field2 TYPE string,
       END OF ty_data.

DATA: lt_table TYPE TABLE OF ty_data WITH EMPTY KEY,
      lv_key1 TYPE i,
      lv_key2 TYPE string.

" 准备数据
lt_table = VALUE #( ( field1 = 1 field2 = 'A' )
                    ( field1 = 2 field2 = 'B' )
                    ( field1 = 3 field2 = 'A' )
                    ( field1 = 3 field2 = 'C' ) ).

" 确保数据按联合主键排序
SORT lt_table BY field1 field2.

" 要查找的键值
lv_key1 = 3.
lv_key2 = 'C'.

" 二分查找
READ TABLE lt_table WITH KEY field1 = lv_key1 field2 = lv_key2 BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
  WRITE: / |找到记录,索引位置:{ sy-tabix }|.
ELSE.
  WRITE: / |未找到匹配记录。|.
ENDIF.

查找失败后的sy-tabix意义
如果READ TABLE未找到记录,sy-tabix返回值表示应插入的位置,保持内表有序性。

使用TRANSPORTING NO FIELDS提高效率
如果只需要确认记录是否存在而不需要读取其值,可以使用TRANSPORTING NO FIELDS。

对于大数据量的查找,若字段种类复杂,使用HASHED TABLE会比二分查找效率更高:

DATA: lt_table TYPE HASHED TABLE OF ty_data WITH UNIQUE KEY field1 field2.

标签:lv,field2,field1,lt,二分法,ABAP,查找,TYPE
From: https://blog.csdn.net/m0_64077397/article/details/144063093

相关文章

  • ABAP开发实战——SMARTFORMS输出字段长度问题
    再smartforms中需要给输出的字段分配所在单元格的长度和宽度,如果,输出长度都不够,数据就无法完全输出,此时可以通过增加输出时的高度,数据会自动换行继续输出,如图所示        同时,这里涉及到了数量的输出问题,数量如果是参考某个数据元素,那么就会有一个初始长度,这里举个例......
  • 查找相关知识点
    一.基本概念1.查找:在数据集合中寻找满足条件的数据元素2.查找表:用于查找的数据结合称之为查找表3.静态查找表(StaticSearchTable):只作查找操作的查找表。主要操作查询某个“特定的”数据元素是否在查找表中。检索某个“特定的”数据元素和各种属性。4.动态查找表(Dy......
  • 查找指定的文件:find、locate、which、whereis
    Linux上查看某个文件的几种方式:1、findfind命令找某个文件的方式,可以指定路径,如指定路基下查找"src.h"#在/usr/include-name目录下搜索src.h文件find/usr/include-name"src.h"#在根目录下搜索src.h文件,忽略错误信息,如没有权限访问的位置find/-name"src.h"......
  • 【ABAP——DAILOG_1】
    文章目录程序类型Report程序:1类型程序Online程序:M类型程序Online程序的主要对象Screen界面中的事件块(EventBlock)界面中常用关键字程序类型Report程序:1类型程序制作报表,数据列表(DataList)输出Online程序:M类型程序查询数据,录入、修改、删除等ModulePool程......
  • 算法沉淀三:二分查找
    目录二分介绍 题目练习1.二分查找2.在排序数组中查找元素的第一个和最后一个位置3.搜索插入位置4.x的平方根5.山峰数组的峰顶6.寻找峰值7.搜索旋转排序数组中的最小值8.0~n-1中缺失的数字《剑指Offer53》 二分介绍 什么是二分查找?二分查找(BinarySearch),也......
  • ABAP 面向对象开发
    一、面向对象        面向对象(Object-Oriented,OO)是现代编程的一种思想和方法,它通过模拟现实世界中的对象及其相互作用来组织和设计程序。ABAP中的面向对象和JAVA、C++等类似,有面向对象的语言开发基础的理解起来会更加快速。有关的事务码:SE24(全局定义),SE38(在代码中定......
  • 梧桐数据库之查找至少有3名直接下属的经理
    一、背景说明假设在一个公司内部有多个部门,每个部门由经理和员工组成。为了更好地管理和优化组织结构,公司希望找出那些直接管理至少3名员工的经理。这些经理通常承担更多的管理职责,并且对公司运营具有更大的影响力。通过分析这些经理及其下属,公司可以更好地理解组织结构,进行人力......
  • 7-441 9-5 查找(折半查找)
    有15个整数按升序提排列,现输入一个数n,请写程序,用折半查找法判断该数在序列中是否存在,若存在则指出是第几个。数组的初值如下:{1,4,6,9,13,16,19,28,40,100,123,222,236,679,899}输入格式:输入要查找的整数n。输出格式:如果找到输出:"找到了,在第...个。"如果没有找到输出:"......
  • 【面向对象的程序设计——接口与多态】类型转换,方法的查找,多态(一)
    文章目录类型转换类型转换的规则转型或向上转型隐式转换显示类型转换方法的查找实例方法的查找类方法查找多态(一)多态的概念多态的作用/目的绑定绑定的概念绑定的分类静态绑定动态绑定类型转换类型转换的规则基本类型之间的转换:就是将值从一种类型转变为另一种......
  • zulu网页查找jdk11最新版下载脚本
    shopt-sexpand_aliasesaliasalias_grep_jdk11_linux_x64_tar_gz_sort_head_n='grepjdk11|greplinux_x64.tar.gz|sort--reverse|head-n'aliasalias_grep_jdk17_linux_x64_tar_gz_sort_head_n='grepjdk17|greplinux_x64.tar.gz|sort-......