If I have seen further, it is by standing on the shoulders of giants.
如果我能看得更远,是因为站在巨人的肩膀上。
1
程序效果
2
源码分享
*&\----------------------------------------------------------------------
*& 11\. Reduce关键字 理解:内表处理
*&\----------------------------------------------------------------------
*& 语法:... REDUCE type(
*& [let_exp]
*& INIT {x1 = rhs1}|{<x1> = wrexpr1}|{x1|<x1> TYPE dtype1}
*& {x2 = rhs2}|{<x2> = wrexpr2}|{x2|<x2> TYPE dtype2}
*& ...
*& FOR for_exp1
*& FOR for_exp2
*& ...
*& NEXT ...
*& {x1 = rhs1}|{<x1> = wrexpr1}
*& {x2 = rhs2}|{<x2> = wrexpr2}
*& ... ) ...
*&
*& 处理场景:计数、求和、最大值、最小值、平均值、文本拼接等
*&\----------------------------------------------------------------------
BEGIN OF gty_student ,
name ( 10 ) TYPE c , "姓名
gender TYPE c , "性别
age TYPE i , "年龄
id ( 10 ) TYPE n , "学生ID
class ( 10 ) TYPE c , "班级
score TYPE p DECIMALS 1 , "成绩
level ( 10 ) TYPE c , "级别
ispass TYPE c , "是否通过
END OF gty_student ,gty_t_student TYPE TABLE OF gty_student WITH EMPTY KEY .
DATA ( gt_student ) = VALUE gty_t_student ( LET pre = 'Student'
random = cl_abap_random_int => create ( seed = CONV # ( sy \- timlo
) min = 0 max = 100 ) IN
FOR n = 1 UNTIL n > 5
( id = n
name = |{ pre } { n }|
gender = COND # ( WHEN n < 3 THEN '男' ELSE '女' )
age = 10 \+ n
class = |{ n }班|
score = random -> get_next ( ) ) ).
DATA ( lv_lines ) = REDUCE i ( INIT lines = 0FOR <stu> IN gt_student WHERE ( gender = '女' )
NEXT lines = lines \+ 1 ).
DATA ( lv_ages ) = REDUCE i ( INIT ages = 0FOR <stu> IN gt_student WHERE ( gender = '女' )
NEXT ages = ages + <stu> \- age ).
BEGIN OF lty_reduce ,
idx TYPE i ,
cnt TYPE i ,
sum TYPE i ,
max TYPE i ,
min TYPE i ,
avg TYPE i ,
str TYPE string ,
END OF lty_reduce ,lty_t_reduce TYPE TABLE OF lty_reduce WITH EMPTY KEY .
DATA ( ls_reduce ) = REDUCE lty_reduce ( INIT res = VALUE lty_reduce( min = 10 )
FOR <stu> IN gt_student INDEX INTO idx WHERE ( gender = '女' )
NEXT res \- idx = idx
res \- cnt = res \- cnt \+ 1 "计数
res \- sum = res \- sum \+ <stu> \- age "求和
res \- max = nmax ( val1 = res \- max val2 = <stu> \- age )
"最大值
res \- min = nmin ( val1 = res \- min val2 = <stu> \- age )
"最小值
res \- avg = res \- sum / res \- cnt "平均值
res \- str = res \- str && <stu> \- name && <stu> \- gender && <stu>
\- age && ';' "文本拼接
).
3
AI解释
仅供参考
这段ABAP代码主要介绍了ABAP中新引入的 REDUCE 关键字的用法,其中核心点如下:
` REDUCE ` 关键字是一种用于对内表进行聚合操作的简化语法。它可以用于处理内表的场景,如计数、求和、最大值、最小值、平均值、文本拼接等。
关键点:
• ` INIT ` 子句用于初始化聚合结果的变量。
• ` FOR ` 子句用于迭代内表,类似于 ` LOOP AT ` .
• ` NEXT ` 子句用于定义迭代过程中每次循环的操作。
示例解释:
• ` lines ` 变量用于计算女生的数量。
• ` ages ` 变量用于计算女生的年龄总和。
• ` ls_reduce ` 结构体用于同时计算女生的计数、求和、最大值、最小值、平均值、文本拼接。
通过 ` REDUCE ` 关键字,可以在一个结构中灵活处理多个聚合操作,简化了对内表的处理逻辑。
以上是今日分享,希望对你有所帮助~~~
欢迎点赞、留言、分享
往期推荐
[ ABAP 新语法-CONV
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495625&idx=1&sn=ad950b397406689d33b0ebb53a0ecbbc&chksm=cf0a3b27f87db231e4d1ebf87813f48ca1fd7346c5174319949c356200db3103c6bdb846bad4&scene=21#wechat_redirect)
[ ABAP 新语法-FOR
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495565&idx=1&sn=e1bbb20a6eb34dd2e0b4c96e9db3de13&chksm=cf0a3b63f87db275b201bd44ae400219f2542a4696122ccc6d3b243ec45a292c693a017b08e5&scene=21#wechat_redirect)
[ ABAP 新语法-SWITCH、COND
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495497&idx=1&sn=b28f14fe1ad6bb07ff1894d41a9c41b7&chksm=cf0a3ba7f87db2b1bffdddc196d2a40b0100fb280111fb5754433c56a0415693d0112b350cbb&scene=21#wechat_redirect)
[ ABAP 新语法-LET
](https://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247495544&idx=1&sn=11a10fc7f45113282e9b0e600c49e9e8&chksm=cf0a3b96f87db280c12b7c18df0823a4207c9d52b56b9d773135e12d6173c9636ce091a79cf4&scene=21#wechat_redirect)
点个 在看 你最好看