RPGLE 数据结构数组查找

RPGLE Data Strucutre Array Lookup

我创建了一个数据结构数组,我想根据组合键查看。即在下面的 DS 中,如果 tblName 和 tblElement 和 tblDivision 匹配,我想查找并获取索引,然后 return 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()% 将只对活动元素执行更快的二进制搜索。