golang:将有序的数字切片转换为数字范围表示的字符串数组
package main
import (
"fmt"
"strconv"
)
func numToRange(numList []int) []string {
if len(numList) == 0 {
return []string{}
}
var retList []string
var start = numList[0]
var end int
var listEnd = numList[len(numList)-1]
for i := 0; i < len(numList)-1; i++ {
if numList[i+1] > numList[i]+1 {
end = numList[i]
if start == end {
retList = append(retList, strconv.Itoa(start))
} else {
retList = append(retList, strconv.Itoa(start)+"-"+strconv.Itoa(end))
}
start = numList[i+1]
}
}
if start == listEnd {
retList = append(retList, strconv.Itoa(start))
} else {
retList = append(retList, strconv.Itoa(start)+"-"+strconv.Itoa(listEnd))
}
return retList
}
func main() {
numList := []int{4, 5, 7, 9, 10, 11, 14}
ret := numToRange(numList)
fmt.Printf("%v\n", ret)
}
运行输出:
[4-5 7 9-11 14]