Sek*_*kar 1 rpg rpgle ibm-midrange
我创建了一个数据结构数组,我想根据组合键进行查找。即在下面的 DS 中,如果 tblName 和 tblElement 和 tblDivision 匹配,我想查找并获取索引,然后返回 tblRes 值。
D TblAryDs DS qualified dim(9999)
D tblName 3
D tblElement 10
D tblDivision 5
D tblRes 2
//Not Sure How to do the below lookup
idx = %lookup(tblName:TblAryDs(*).tblName) && %lookup(tblElement:TblAryDs(*).tblElement) && %lookup(tblDivision:TblAryDs(*).tblDivision);
if idx > *zeros;
return TblAryDs(*).tblRes;
endif;
Run Code Online (Sandbox Code Playgroud)
D TblAryDs DS qualified dim(9999)
D key
D tblName 3a overlay(key)
D tblElement 10a overlay(key:*next)
D tblDivision 5a overlay(key:*next)
D tblRes 2a
/FREE
idx = %lookup(tblName + tblElement + tblDivision
:TblAryDs(*).key);
if idx > *ZEROS;
return TblAryDs(idx).tblRes;
endif;
/END-FREE
Run Code Online (Sandbox Code Playgroud)
注意:如上编码,%LOOKUP()将搜索所有 9999 个元素。如果您必须重复搜索不同的值,请将ASCEND关键字添加到数组中,并SORTA在搜索之前对其进行排序。最后,跟踪数组中实际使用了多少元素。
idx = %lookup(tblName + tblElement + tblDivision
: TblAryDs(*).key : nbrElemUsed);
Run Code Online (Sandbox Code Playgroud)
这种方式%LOOKUP()%将仅对活动元素执行更快的二分搜索。