有没有办法在snocount不使用SORT语句的情况下找到最大值?
TYPES: BEGIN OF ls_student1,
snocount(5) TYPE n,
id TYPE i,
property(10) TYPE c,
value(10) TYPE c,
END OF ls_student1.
DATA: wa1 TYPE ls_student1,
lt_table4 TYPE HASHED TABLE OF ls_student1 with UNIQUE key snocount id.
lt_table4 = VALUE #(
( snocount = 1 id = 1 property = 'name' value = 'rambo' )
( snocount = 4 id = 1 property = 'age' value = '23' )
( snocount = 5 id = 1 property = 'college' value = 'VIL' )
( snocount = 3 id = 1 property = 'phone no' value = '9599993451' )
( snocount = 8 id = 1 property = 'f name' value = 'john whick' ) ).
LOOP AT lt_table4 INTO wa1.
WRITE:/ wa1-snocount, wa1-id, wa1-property, wa1-value.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)
程序:
DATA row_with_max_snocount TYPE ls_student1.
LOOP AT lt_table4 INTO DATA(candidate).
IF candidate-snocount > row_with_max_snocount-snocount.
row_with_max_snocount = candidate.
ENDIF.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)
函数表达式:
DATA(row_with_max_snocoun) =
REDUCE ls_student1(
INIT max = VALUE #( )
FOR row IN lt_table4
NEXT max = COND #(
WHEN row-snocount > max-snocount
THEN row
ELSE max ) ).
Run Code Online (Sandbox Code Playgroud)
两者都需要c * n步才能找到最大值。如果您这样做一次,并且仅针对最大值,则这在计算理论方面是最佳的。
对表格进行排序以找到最大值通常需要更长的时间,c * n * log n步。这仅在您想按顺序访问多行时才值得。
如果您还需要最小值,则有一种不同的算法可以在3/2 * c * n步骤中完成。
对于包含大量列或包含嵌套结构的表,请考虑使用引用TYPE REF TO ls_student1而不是变量,TYPE ls_student1因为它们可以避免在主内存中复制数据。
| 归档时间: |
|
| 查看次数: |
3883 次 |
| 最近记录: |