Chuyển tới nội dung chính

So sánh hai chuỗi phiên bản (string.compare_version)

Khai báo

cmp = string.compare_version(ver_a, ver_b)

Tham số

  • ver_a, ver_b
    Chuỗi. Các phiên bản cần so sánh.

Giá trị trả về

  • cmp
    Số nguyên. Trả về 1 nếu ver_a > ver_b, -1 nếu ver_a < ver_b và 0 nếu bằng nhau.

Mô tả

So sánh hai chuỗi phiên bản theo các quy tắc sau:

  • Tách thành các đoạn số bằng dấu '.', dấu '-' hoặc dấu cách (nhiều dấu phân cách liên tiếp được gộp thành một)
  • Các đoạn ở bên trái có trọng số cao hơn
  • Dừng tại ký tự không hợp lệ đầu tiên
  • Bổ sung các đoạn còn thiếu bằng '0'
  • Chuỗi trống hoặc không hợp lệ được xem là '0'
  • Ví dụ: '1.1' == '1.1.0' == '1-1'; '1.0' == '1 0'; '1.0' > '0.99999'
  • Có thể sử dụng trong XUI

Ví dụ

-- "1.5", "1.05" và "1.005" là cùng một phiên bản
-- "1.5", "1.50" và "1.500" là ba số phiên bản khác nhau
-- "1.11" lớn hơn "1.5"
-- "1.52" bằng "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)

-- Ví dụ lớn hơn / nhỏ hơn
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)