Golang版本号对比实现


func main() {
    v1 := "1.2"
    v2 := "1.2.1.2"
    fmt.Println(VersionCompare(v1, v2)) // -1
}

// 版本号对比:v1 > v2 ==> 1 或 v1 < v2 ==> -1 或 v1 == v2 ==> 0
func VersionCompare(v1, v2 string) int {
    sv1 := strsToSlice(v1)
    sv2 := strsToSlice(v2)
    s1Appended, s2Appended := apeendZreo(sv1, sv2)
    for i := 0; i < len(s1Appended); i++ {
        if s1Appended[i] > s2Appended[i] {
            return 1
        }
        if s1Appended[i] < s2Appended[i] {
            return -1
        }
    }
    // 退出循环表示版本号相同
    return 0
}

//  补全切片
func apeendZreo(s1, s2 []string) ([]string, []string) {
    var count int
    if len(s1) > len(s2) {
        count = len(s1) - len(s2)
        for i := 0; i < count; i++ {
            s2 = append(s2, "0")
        }
    }
    if len(s1) < len(s2) {
        count = len(s2) - len(s1)
        for i := 0; i < count; i++ {
            s1 = append(s1, "0")
        }
    }

    return s1, s2
}

func strsToSlice(version string) []string {
    return strings.Split(version, ".")
}

func strToInt64(str string) int64 {
    res, err := strconv.Atoi(str)
    if err != nil {
        fmt.Println("Invalid Number string")
        return -1
    }
    return int64(res)
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容