如何比较 groovy 中的值
How to compare values in groovy
我正在尝试将当前版本与某个程序的可用版本进行比较。我想要比当前版本更高的所有可用版本。我不知道如何进行比较:
groovy.txt
样本:
11.6
groovy1.txt
样本:
9.6.3 9.6.6 9.6.8 9.6.9 9.6.11 9.6.12 9.6.16 10.14 10.14 10.16 11.4 11.6 11.7 11.8 11.9 11.11 12.4 12.6
当我这样做时,由于 av.findAll { it > cv }
:
中的强制转换,我遇到了以下错误
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
出现您的问题是因为标记化 returns 无法与字符串进行比较的字符串列表。它发生在这一行:
av.findAll { it > cv }
cv
使用:
def cv = output.tokenize().collect { it.tokenize('.').collect { it as int } }.first()
对于av
:
def av = output2.tokenize().collect { it.tokenize('.').collect { it as int } }
我将 9.6.11
之类的版本号放入 [9, 6, 11]
之类的数组中进行比较,直到找出数字是否更大。
然后写代码比较版本:
av.findAll {
def isVersionGreater
it.indexed().any { i, v ->
if (cv[i] == v) return false
isVersionGreater = v > (cv[i] ?: 0)
return true
}
return isVersionGreater
}.collect { it.join('.') }
AFAIK,不幸的是,Groovy 没有 Python 等同于 [9, 6, 11] < [11, 1]
来比较版本。
我正在尝试将当前版本与某个程序的可用版本进行比较。我想要比当前版本更高的所有可用版本。我不知道如何进行比较:
groovy.txt
样本:
11.6
groovy1.txt
样本:
9.6.3 9.6.6 9.6.8 9.6.9 9.6.11 9.6.12 9.6.16 10.14 10.14 10.16 11.4 11.6 11.7 11.8 11.9 11.11 12.4 12.6
当我这样做时,由于 av.findAll { it > cv }
:
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
出现您的问题是因为标记化 returns 无法与字符串进行比较的字符串列表。它发生在这一行:
av.findAll { it > cv }
cv
使用:
def cv = output.tokenize().collect { it.tokenize('.').collect { it as int } }.first()
对于av
:
def av = output2.tokenize().collect { it.tokenize('.').collect { it as int } }
我将 9.6.11
之类的版本号放入 [9, 6, 11]
之类的数组中进行比较,直到找出数字是否更大。
然后写代码比较版本:
av.findAll {
def isVersionGreater
it.indexed().any { i, v ->
if (cv[i] == v) return false
isVersionGreater = v > (cv[i] ?: 0)
return true
}
return isVersionGreater
}.collect { it.join('.') }
AFAIK,不幸的是,Groovy 没有 Python 等同于 [9, 6, 11] < [11, 1]
来比较版本。