メインコンテンツまでスキップ

二つのバージョン番号を比較する (string.compare_version)

宣言

比較結果 = string.compare_version(バージョン番号A, バージョン番号B)

パラメータ

  • バージョン番号A, バージョン番号B
    文字列型。比較する二つのバージョン番号です

戻り値

  • 比較結果
    整数型。バージョン番号A がバージョン番号B より大きい場合は 1、小さい場合は -1、等しい場合は 0 を返します

説明

二つのバージョン番号文字列を、以下のルールに従って比較します
ピリオド .、ハイフン -、または空白で区切られた数字のみの値を使用します
異なる区切り文字は同じように扱い、複数の区切り文字が連続する場合は一つの区切り文字とみなします
セグメントの重みは、左から右へ進むにつれて小さくなります
不正な文字が見つかった時点で比較を打ち切り、それ以降の内容は比較しません
セグメント数が異なる場合、不足するセグメントを '0' で補って比較します
空文字列や不正な文字列は、バージョン番号 '0' とみなします
たとえば、'1.1' と '1.1.0' は等しいバージョン番号です
たとえば、'1.1' と '1.1-0' は等しいバージョン番号です
たとえば、'1.1' と '1-1' は等しいバージョン番号です
たとえば、'1.0' と '1 0' (1 と 0 の間には空白があります) は等しいバージョン番号です
たとえば、'1.0' は '0.99999' より大きいです
この関数は XUI で使用できます

使用例

-- "1.5"、"1.05"、"1.005" は同じバージョンです
-- "1.5"、"1.50"、"1.500" は三つの異なるバージョン番号です
-- "1.11" は "1.5" より大きいです
-- "1.52" は "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)