在go lang中对字符串进行排序

时间:2017-12-29 12:52:33

标签: go

如何在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)
}

1 个答案:

答案 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