Pular para o conteúdo principal

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 com 0;
uma string vazia ou inválida é considerada o número de versão 0;
por exemplo, 1.1 e 1.1.0 são números de versão iguais;
1.1 e 1.1-0 também são iguais;
1.1 e 1-1 também são iguais;
1.0 e 1 0 (com um espaço entre 1 e 0) são iguais;
1.0 é maior que 0.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)