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ề1nếu ver_a>ver_b,-1nếu ver_a<ver_b và0nế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)