如何在golang中对4.3.4,4.3.30等字符串进行排序。有一种名为" sort"的方法。在golang?问题是用这种方法在4.3.4之前打印4.3.30。我希望在4.3.4之后打印4.3.30。这种排序的逻辑是什么? 注意 - 我只需要一个逻辑天气,它将在go或java中。 提前致谢。 供你参考,"排序"程序在go:
package main
import "sort"
import "fmt"
type ByLength []string
func (s ByLength) Len() int {
return len(s)
}
func (s ByLength) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s ByLength) Less(i, j int) bool {
return (s[i]) < (s[j])
}
func main() {
abc := []string{"1.5.8", "5.8.4", "4.3.30"}
sort.Sort(ByLength(abc))
fmt.Println(abc)
}
答案 0 :(得分:1)
没有特殊处理的字符串按lexicographically排序。
这意味着&#34; 30&#34;用字符串表示小于&#34; 4&#34;因为角色&#34; 3&#34;按字典顺序小于字符&#34; 4&#34;。
如果要根据字符串中的整数值对这些进行排序,则需要自己进行排序。
因此,在比较器函数func (s ByLength) Less(i, j int) bool
中,您可以执行以下操作:
.
这当然只适用于.
分隔的字符串,您必须将其调整为其他分隔符。
您还必须担心非整数部分和具有不同部件数量的字符串(例如:4.3
vs 4.3.5
)