Comparar dois números de versão (string.compare_version)
Declaração
resultado = string.compare_version(versão_a, versão_b)
Parâmetros
- versão_a, versão_b
Texto; os dois números de versão a serem comparados.
Valor retornado
- resultado
Inteiro; retorna 1 quando versão_a é maior que versão_b, -1 quando versão_a é menor que versão_b e 0 quando são iguais.
Descrição
Compara dois números de versão como strings seguindo estas regras:
usa valores numéricos puros separados por ponto., hífen-ou espaço;
separadores diferentes têm o mesmo efeito, e vários separadores consecutivos são tratados como um só;
o peso diminui progressivamente da esquerda para a direita entre os segmentos;
ao encontrar qualquer caractere inválido, interrompe a comparação e ignora o restante;
se a quantidade de segmentos for diferente, completa os segmentos ausentes com0;
uma string vazia ou inválida é considerada o número de versão0;
por exemplo,1.1e1.1.0são números de versão iguais;
1.1e1.1-0também são iguais;
1.1e1-1também são iguais;
1.0e1 0(com um espaço entre 1 e 0) são iguais;
1.0é maior que0.99999.
Esta função pode ser usada no XUI.
Exemplo
-- "1.5", "1.05" e "1.005" são a mesma versão
-- "1.5", "1.50" e "1.500" são três números de versão diferentes
-- "1.11" é maior que "1.5"
-- "1.52" é igual a "1.52.0"
assert(string.compare_version("", "") == 0)
assert(string.compare_version("1", "") == 1)
assert(string.compare_version("", "1") == -1)
assert(string.compare_version("1", "1") == 0)
assert(string.compare_version("1.0", "1") == 0)
assert(string.compare_version("1", "1.0") == 0)
assert(string.compare_version("1.", "1") == 0)
assert(string.compare_version("1", "1.") == 0)
assert(string.compare_version("1.", "1.0") == 0)
assert(string.compare_version("1.0", "1.") == 0)
assert(string.compare_version("1.0", "1.0") == 0)
assert(string.compare_version("1.0.0", "1.0.0") == 0)
assert(string.compare_version("1.1", "1.0") == 1)
assert(string.compare_version("1.0", "1.1") == -1)
assert(string.compare_version("1.1", "1.10") == -1)
assert(string.compare_version("1.2", "1.11") == -1)
assert(string.compare_version("1.1", "1.1.1") == -1)
assert(string.compare_version("1.2", "1.1.1") == 1)
assert(string.compare_version("1.0", "0.99999") == 1)
assert(string.compare_version("1.10.1", "1.10") == 1)
assert(string.compare_version("1.2-4", "1.2-3") == 1)
assert(string.compare_version("1.2-3", "1.2.3") == 0)
assert(string.compare_version("1.2-4", "1.2.3.0") == 1)
assert(string.compare_version("1.2-4", "1.2.3.10") == 1)
assert(string.compare_version("1.2-4", "1.2.30.10") == -1)
assert(string.compare_version("1.2-3", "1.2.4") == -1)
assert(string.compare_version("2.2", "1.2") == 1)
assert(string.compare_version("2.2", "10.2") == -1)
assert(string.compare_version("2..2", "2.2") == 0)
assert(string.compare_version("2.2.x.3", "2.2") == 0)
assert(string.compare_version("x", "") == 0)