第 9/36 课 · 约 30 分钟
DAS 脚本集合、数字键与有界遍历
通过 Set/Get/Del 构建集合并汇总,不套用 JavaScript 数组语法。
带索引的对象不是 JavaScript 数组
前置知识:NewUserObj 与 while。官方使用数字键构建类似数组的结构;长度自己维护,明确从零还是从一开始。此例不证明支持方括号、push、map、filter、length。数字键通过 Set/Get 访问,不能写成 .0。
完整的有界汇总
$feSamples = NewUserObj();
$feSamples.Set(0, 8);
$feSamples.Set(1, 12);
$feSamples.Set(2, 10);
$feCount = 3;
$feIndex = 0;
$feSum = 0;
$feMaximum = $feSamples.Get(0);
while ($feIndex < $feCount) {
$feValue = $feSamples.Get($feIndex);
$feSum = $feSum + $feValue;
if ($feValue > $feMaximum) {
$feMaximum = $feValue;
}
$feIndex = $feIndex + 1;
}
$feMean = $feSum / $feCount;
MsgBox($feSum, $feMean, $feMaximum);
循环不变量与空集合
处理索引 k 后,sum 应包含前 k+1 个值,maximum 覆盖同一范围。预期结果为 30、10、12。循环从零开始,在 count 前停止,每次必须推进索引。改为动态数据时,先检查 count>0,再读取首项和除法。全负数集合不能以零初始化最大值,因此用第一个已确认存在的元素。
删除之后必须决定集合结构
Del(1) 只删除键,并没有说明会把键 2 自动前移或减少 count。删除后要么重建连续索引,要么维护有效键列表。Del("*") 不会自动清除外部保存的 count。文档中的 200 次循环上限是平台保护,不应当作设计目标;不能用 while 忙等网络或订单状态。
练习与参考解答
将样本改为 -4、-9、-2,参考结果:最大值 -2,总和 -15,均值 -5。删除索引 1 后,一种正确做法是将剩余两个值重建到键 0、1,并设 count=2,得到总和 -6、均值 -3。直接保留 count=3 会读到缺失键。