You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IBM EGL中按日期、安装员编号、时段降序排序数组?

IBM EGL 实现 FreelanceOrderRec 数组多字段降序排序

核心实现思路

EGL中对数组排序依赖SortLib.sort()函数,需自定义比较函数来实现date→installerNr→partOfDay的三级降序逻辑。比较函数返回规则:

  • 负数:第一个参数应排在第二个参数之前
  • 正数:第二个参数应排在第一个参数之前
  • 0:两个元素排序优先级相同

完整代码实现

1. 自定义比较函数

function compareOrders(a FreelanceOrderRec, b FreelanceOrderRec) returns (int)
    // 第一优先级:date 降序
    if (a.date > b.date)
        return -1;
    else if (a.date < b.date)
        return 1;
    end

    // 第二优先级:installerNr 降序
    if (a.installerNr > b.installerNr)
        return -1;
    else if (a.installerNr < b.installerNr)
        return 1;
    end

    // 第三优先级:partOfDay 排序
    // 情况1:按字符串原生降序("Not Known." 会排在最前)
    return compareStrings(b.partOfDay, a.partOfDay);
    
    // 情况2:按业务时段优先级降序(3→2→1→Not Known.),取消注释下方代码并注释上方行
    // return comparePartOfDay(a.partOfDay, b.partOfDay);
end

// 可选:按业务逻辑处理partOfDay排序的辅助函数
function comparePartOfDay(a string, b string) returns (int)
    aKey = getPartOfDayKey(a);
    bKey = getPartOfDayKey(b);
    
    if (aKey > bKey)
        return -1;
    else if (aKey < bKey)
        return 1;
    end
    return 0;
end

function getPartOfDayKey(part string) returns (int)
    case part
        when "1 (08:00-13:00)" return 3;
        when "2 (11:00-15:00)" return 2;
        when "3 (13:00-17:00)" return 1;
        when "Not Known." return 0;
        otherwise return 0;
    end
end

2. 执行排序

在业务代码中调用排序函数,传入目标数组和自定义比较函数:

// 对无序数组freelanceOrderRecs执行排序
SortLib.sort(freelanceOrderRecs, compareOrders);

关键逻辑说明

  • date降序:直接比较date类型值的大小,通过返回值控制排序顺序;
  • installerNr降序:同理,基于int类型的数值比较实现降序;
  • partOfDay排序:
    • 原生字符串降序:借助EGL内置compareStrings()函数,按字符串ASCII码值降序排列,此时"Not Known."会因首字符ASCII值大于数字排在最前;
    • 业务逻辑排序:通过辅助函数将时段映射为优先级数值,实现3时段→2时段→1时段→未知时段的降序,更贴合业务需求。

内容的提问来源于stack exchange,提问作者Laurens Wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:50:20