1package main 2 3import "fmt" 4 5func VersionOrdinal(version string) string { 6 // ISO/IEC 14651:2011 7 const maxByte = 1<<8 - 1 8 vo := make([]byte, 0, len(version)+8) 9 j := -1 10 for i := 0; i < len(version); i++ { 11 b := version[i] 12 if '0' > b || b > '9' { 13 vo = append(vo, b) 14 j = -1 15 continue 16 } 17 if j == -1 { 18 vo = append(vo, 0x00) 19 j = len(vo) - 1 20 } 21 if vo[j] == 1 && vo[j+1] == '0' { 22 vo[j+1] = b 23 continue 24 } 25 if vo[j]+1 > maxByte { 26 panic("VersionOrdinal: invalid version") 27 } 28 vo = append(vo, b) 29 vo[j]++ 30 } 31 return string(vo) 32} 33 34func main() { 35 versions := []struct{ a, b string }{ 36 {"1.05.00.0156", "1.0.221.9289"}, 37 // Go versions 38 {"1", "1.0.1"}, 39 {"1.0.1", "1.0.2"}, 40 {"1.0.2", "1.0.3"}, 41 {"1.0.3", "1.1"}, 42 {"1.1", "1.1.1"}, 43 {"1.1.1", "1.1.2"}, 44 {"1.1.2", "1.2"}, 45 } 46 for _, version := range versions { 47 a, b := VersionOrdinal(version.a), VersionOrdinal(version.b) 48 switch { 49 case a > b: 50 fmt.Println(version.a, ">", version.b) 51 case a < b: 52 fmt.Println(version.a, "<", version.b) 53 case a == b: 54 fmt.Println(version.a, "=", version.b) 55 } 56 } 57}
go 比较两个字符串的版本号大小
Wesley13
2021-10-11
1076 0 0
点赞
收藏
评论区
加载中...