如何在 RPGLE 中检索整数数组的最大值和最小值

How to retrieve MAX and MIN value of an integer array in RPGLE

在RPGLE (AS400) 中如何获取整数数组的最大值和最小值。

不幸的是,%min()%max() 不对数组进行操作...

最佳解决方案是按升序对数组进行排序,然后最小值排在第一个条目,最大值排在最后一个。

如果数组没有完全填满,请务必记录您实际使用了多少元素。那么你可以使用以下内容:

sorta (a) %subarr(myarry:1:nbrEntries);

虽然可以对数组进行排序,但对于典型的 min/max 用法来说效率不是特别高。排序比简单的线性搜索增加了更多的开销,并且只有当您想在排序的数组上多次获取值并且您永远不需要向该数组添加更多未排序的数据时才会更有效。

我建议您自己用一个简单的 for 循环实现它:

For Ix = 1 To %Elem(MyArray);
    If Array(Ix) > MyMax;
        MyMax = Array(Ix);
    EndIf;
    If Array(Ix) < MyMin;
        MyMin = Array(Ix);
    EndIf;
EndFor;

根据您的使用场景,将其放入一个或多个子过程中可能有意义 MaxMinMinMax.

有一个 RFE 支持数组的 %MAX 和 %MIN 之类的东西。到目前为止,它只有 15 票...... http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=116540

在向数组添加新元素时,您可以跟踪新值是小于当前最小值还是大于当前最大值。然后,最小值和最大值将始终可用。您可以跟踪最小值和最大值的索引,或者跟踪实际值。

编辑:正如 Charles 所建议的,我在 RFE 中添加了一个 link 以支持数组的 %MAX 和 %MIN 之类的东西。 http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=116540