Abap 获取非索引内部表的第一行

Abap 获取非索引内部表的第一行,abap,Abap,我有一个类型为任意表的变量,它应该是,因为它可以包含标准、排序或哈希,我需要得到该表的第一行 使用索引访问,例如 READ TABLE itab INDEX 1` or `itab[ 1 ] 对于那种类型是不可能的。有没有一种优雅的方式可以到达第一条线路 我的方式并不优雅: LOOP AT itab ASSIGNING <ls_line>. EXIT. ENDLOOP. 在itab分配时循环。 出口 结束循环。 谷歌搜索没有找到合适的答案。你的问题毫无意义,因为你无法明确

我有一个类型为任意表的变量,它应该是,因为它可以包含标准、排序或哈希,我需要得到该表的第一行

使用索引访问,例如

READ TABLE itab INDEX 1` or `itab[ 1 ] 
对于那种类型是不可能的。有没有一种优雅的方式可以到达第一条线路

我的方式并不优雅:

LOOP AT itab ASSIGNING <ls_line>.
  EXIT.
ENDLOOP.
在itab分配时循环。
出口
结束循环。

谷歌搜索没有找到合适的答案。

你的问题毫无意义,因为你无法明确定义任务中的首要任务

您的泛型变量可以接受任何表。如果这是散列表,则它由键字段组织,如果DB表具有相同的键,则它通常类似于数据库表


如果这是索引表(标准或已排序),则其排序顺序由索引决定,而索引与字段顺序或键无关。如果对表进行了一些操作(插入、更新、删除),它将不同于自然排序和DB排序。

您的问题毫无意义,因为您无法明确定义任务中的第一个操作

您的泛型变量可以接受任何表。如果这是散列表,则它由键字段组织,如果DB表具有相同的键,则它通常类似于数据库表

如果这是索引表(标准或已排序),则其排序顺序由索引决定,而索引与字段顺序或键无关。如果对表进行了一些操作(插入、更新、删除),它将不同于自然排序和DB排序。

哈希内部表的“第一行”的含义有点主观,因为哈希内部表通常是通过键值而不是位置来访问的

如果您指的是第一行“”,那么没有比问题中提出的解决方案更好的解决方案了:

TYPES ty_hashed_table TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
DATA(hashed_table) = VALUE ty_hashed_table( ( `World` ) ( `Hello` ) ).
LOOP AT hashed_table ASSIGNING FIELD-SYMBOL(<line>).
  EXIT.
ENDLOOP.
ASSERT <line> = `World`.
TYPES ty_hashed_table TYPE字符串的哈希表,具有唯一键table_行。
数据(哈希表)=值ty\u哈希表((`World`)(`Hello`))。
在哈希_表指定字段-SYMBOL()时循环。
出口
结束循环。
ASSERT=`World`。
如果“第一行”是指具有哈希内部表中包含最低值的给定组件的行,则可以定义次排序的键:

TYPES ty_hashed_table TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line
                      WITH NON-UNIQUE SORTED KEY by_table_line COMPONENTS table_line
                      ##TABKEY[PRIMARY_KEY][BY_TABLE_LINE].
DATA(hashed_table) = VALUE ty_hashed_table( ( `World` ) ( `Hello` ) ).
ASSIGN hashed_table[ KEY by_table_line INDEX 1 ] TO FIELD-SYMBOL(<line>).
ASSERT <line> = `Hello`.
TYPES ty_hash_table TYPE字符串的哈希表,带有唯一键table\u行
使用非唯一排序键按\u表\u行组件表\u行
##TABKEY[主键][按表行]。
数据(哈希表)=值ty\u哈希表((`World`)(`Hello`))。
将哈希_表[按_表_行索引1键]分配给字段-SYMBOL()。
ASSERT=`Hello`。
散列内部表“第一行”的含义有点主观,因为散列内部表通常是通过键值而不是位置来访问的

如果您指的是第一行“”,那么没有比问题中提出的解决方案更好的解决方案了:

TYPES ty_hashed_table TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line.
DATA(hashed_table) = VALUE ty_hashed_table( ( `World` ) ( `Hello` ) ).
LOOP AT hashed_table ASSIGNING FIELD-SYMBOL(<line>).
  EXIT.
ENDLOOP.
ASSERT <line> = `World`.
TYPES ty_hashed_table TYPE字符串的哈希表,具有唯一键table_行。
数据(哈希表)=值ty\u哈希表((`World`)(`Hello`))。
在哈希_表指定字段-SYMBOL()时循环。
出口
结束循环。
ASSERT=`World`。
如果“第一行”是指具有哈希内部表中包含最低值的给定组件的行,则可以定义次排序的键:

TYPES ty_hashed_table TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line
                      WITH NON-UNIQUE SORTED KEY by_table_line COMPONENTS table_line
                      ##TABKEY[PRIMARY_KEY][BY_TABLE_LINE].
DATA(hashed_table) = VALUE ty_hashed_table( ( `World` ) ( `Hello` ) ).
ASSIGN hashed_table[ KEY by_table_line INDEX 1 ] TO FIELD-SYMBOL(<line>).
ASSERT <line> = `Hello`.
TYPES ty_hash_table TYPE字符串的哈希表,带有唯一键table\u行
使用非唯一排序键按\u表\u行组件表\u行
##TABKEY[主键][按表行]。
数据(哈希表)=值ty\u哈希表((`World`)(`Hello`))。
将哈希_表[按_表_行索引1键]分配给字段-SYMBOL()。
ASSERT=`Hello`。

哈希表没有索引,但是SAP允许在哈希表的条目处循环)。也许你的解决方案并不优雅,但当内部表被散列或任何类型的表时,它是最短、最清晰的代码……顺便说一下,正如我所说的,读取散列内部表的“第一”行意味着读取插入的第一行,这有点像读取“任何”因为读取“第一行”没有功能意义。目标是什么?(注意:如果您使用了SORT,那么更愿意向散列的内部表添加一个二级排序键,并通过该键访问其第一行)。要求第一个简化。目标是获取任何一行中相同的信息。然后决定是否需要迭代。哈希表没有索引,但SAP允许在哈希表的条目处循环)。也许你的解决方案并不优雅,但当内部表被散列或任何类型的表时,它是最短、最清晰的代码……顺便说一下,正如我所说的,读取散列内部表的“第一”行意味着读取插入的第一行,这有点像读取“任何”因为读取“第一行”没有功能意义。目标是什么?(注意:如果您使用了SORT,那么更愿意向散列的内部表添加一个二级排序键,并通过该键访问其第一行)。要求第一个简化。目标是获取任何一行中相同的信息。然后决定是否需要迭代。