我创建了一个数据结构数组,我想根据组合键进行查找。 即在下面的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;
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
注意:如上所述,%LOOKUP()
将搜索所有 9999 个元素。 如果必须重复搜索不同的值,请将 ASCEND
关键字添加到数组中,并在搜索之前使用 SORTA
对其进行排序。 最后,跟踪数组中实际使用了多少元素。
idx = %lookup(tblName + tblElement + tblDivision
: TblAryDs(*).key : nbrElemUsed);
这样%LOOKUP()%
将仅对活动元素执行更快的二叉搜索。