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

Groovy中如何在for循环中按指定版本区间迭代列表并正确比较版本号

存在的问题

  • 判断条件逻辑错误
    你写的判断条件B >= item && A <= item实际含义是「当前版本item小于等于起始版本B,同时大于等于目标版本A」,完全和你要的「从B开始到A结束的所有版本」需求相反,所以首先就会过滤掉大部分符合要求的版本。
  • 直接字符串比较版本号不成立
    字符串比较是逐位按ASCII码值对比,比如版本1.10.0和1.7对比时,第二位字符1的ASCII码小于7,会得到"1.10.0" < "1.7"的错误结果,和实际版本号大小规则完全不符,就算你改对判断条件也拿不到正确结果。

修复后的代码

def C = ['1.0', '1.6', '1.7', '1.7.1', '1.10.0', '1.11.0', '1.12']
def A = '1.12'
def B = '1.7'

// 实现符合语义的版本号比较方法
def compareVer(String ver1, String ver2) {
    def v1Parts = ver1.split(/\./).collect { it.toInteger() }
    def v2Parts = ver2.split(/\./).collect { it.toInteger() }
    def len = Math.max(v1Parts.size(), v2Parts.size())
    for (int i = 0; i < len; i++) {
        def p1 = i < v1Parts.size() ? v1Parts[i] : 0
        def p2 = i < v2Parts.size() ? v2Parts[i] : 0
        if (p1 != p2) {
            return p1 <=> p2
        }
    }
    return 0
}

for (item in C) {
    // 修正判断逻辑:item >= B 且 item <= A
    if (compareVer(item, B) >= 0 && compareVer(item, A) <= 0) {
        println "deploy the version ${item}"
    }
}

运行上述代码即可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:18:02