【发布时间】:2020-05-14 01:27:59
【问题描述】:
在 RPGLE (AS400) 中如何获取整数数组的最大值和最小值。
【问题讨论】:
标签: ibm-midrange rpgle cl rpg
在 RPGLE (AS400) 中如何获取整数数组的最大值和最小值。
【问题讨论】:
标签: ibm-midrange rpgle cl rpg
很遗憾,%min() 和 %max() 不能对数组进行操作...
最好的解决方案是按升序对数组进行排序,然后将最小值作为第一个条目,将最大值作为最后一个条目。
如果数组没有完全填满,请务必记录您实际使用了多少元素。然后您可以使用以下内容:
sorta (a) %subarr(myarry:1:nbrEntries);
【讨论】:
当您向数组添加新元素时,您可以跟踪新值是小于当前最小值还是大于当前最大值。然后,最小值和最大值将始终可用。您可以跟踪最小值和最大值的索引,也可以跟踪实际值。
编辑:正如查尔斯建议的那样,我正在添加一个指向 RFE 的链接,以支持数组的 %MAX 和 %MIN 之类的东西。 http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=116540
【讨论】:
虽然对数组进行排序是可行的,但对于典型的最小/最大用法来说并不是特别有效。排序比简单的线性搜索增加了更多的开销,并且只有在您想在已排序的数组上多次获取值并且您不需要向该数组添加更多未排序的数据时才会更有效。
我建议你自己用一个简单的 for 循环来实现它:
For Ix = 1 To %Elem(MyArray);
If Array(Ix) > MyMax;
MyMax = Array(Ix);
EndIf;
If Array(Ix) < MyMin;
MyMin = Array(Ix);
EndIf;
EndFor;
根据您的使用场景,将其放在一个或多个子过程中可能是有意义的Max、Min、MinMax。
【讨论】:
有一个 RFE 支持数组的 %MAX 和 %MIN 之类的东西。到目前为止它只有15票...... http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=116540
【讨论】: