系统运维

Go语言sort包排序!老男孩IT教育

字号+作者:益华科技来源:域名2025-11-05 11:19:25我要评论(0)

Go语言sort包提供了排序切片和用户自定义数据集的函数。基本类型排序1、升序排序对于 int 、 float64 和 string 数组或是分片的排序, go 分别提供了 sort.Ints() 、

  Go语言sort包提供了排序切片和用户自定义数据集的包排函数。

  基本类型排序

Go语言sort包排序!老男孩IT教育

  1、序老升序排序

  对于 int 、男孩 float64 和 string 数组或是教育分片的排序, go 分别提供了 sort.Ints() 、包排 sort.Float64s() 和 sort.Strings() 函数,序老 默认都是男孩从小到大排序。

package main import ( "fmt" "sort" ) func main() { intList1 := []int{2,教育 0, 1, 8, 0, 9, 2, 4, 1, 2} floatList1 := []float64{4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} stringList1 := []string{"o", "l", "d", "b", "o", "y", "g", "o", "l", "a", "n", "g"} // 方法一 sort.Ints(intList1) sort.Float64s(floatList1) sort.Strings(stringList1) fmt.Printf("方法一:\n%v\n%v\n%v\n", intList1, floatList1, stringList1) // 方法二 intList2 := []int{2, 0, 1, 8, 0, 9, 2, 4, 1, 2} floatList2 := []float64{4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} stringList2 := []string{"o", "l", "d", "b", "o", "y", "g", "o", "l", "a", "n", "g"} sort.Sort(sort.IntSlice(intList2)) sort.Sort(sort.Float64Slice(floatList2)) sort.Sort(sort.StringSlice(stringList2)) fmt.Printf("方法二:\n%v\n%v\n%v\n", intList2, floatList2, stringList2) // 方法三 intList3 := []int{2, 0, 1, 8, 0, 9, 2, 4, 1, 2} floatList3 := []float64{4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} stringList3 := []string{"o", "l", "d", "b", "o", "y", "g", "o", "l", "a", "n", "g"} (sort.IntSlice(intList3)).Sort() (sort.Float64Slice(floatList3)).Sort() (sort.StringSlice(stringList3)).Sort() fmt.Printf("方法二:\n%v\n%v\n%v\n", intList3, floatList3, stringList3) }

  2、降序排序

  sort 包下的包排三个类型 IntSlice 、 Float64Slice 、序老 StringSlice 分别实现了这三个方法,男孩 对应排序的教育是 [] int 、 [] float64 和 [] string 。免费信息发布网包排如果期望逆序排序,序老 只需要将对应的男孩 Less 函数简单修改一下即可。

  go 的 sort 包可以使用 sort.Reverse(slice) 来调换 slice.Interface.Less ,也就是比较函数,所以, int 、 float64 和 string 的逆序排序函数可以这么写:

package main import ( "fmt" "sort" ) func main() { intList := []int{2, 0, 1, 8, 0, 9, 2, 4, 1, 2} floatList := []float64{4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} stringList := []string{"o", "l", "d", "b", "o", "y", "g", "o", "l", "a", "n", "g"} sort.Sort(sort.Reverse(sort.IntSlice(intList))) sort.Sort(sort.Reverse(sort.Float64Slice(floatList))) sort.Sort(sort.Reverse(sort.StringSlice(stringList))) fmt.Printf("%v\n%v\n%v\n", intList, floatList, stringList) }

  结构体类型的排序

  结构体类型的排序是通过使用 sort.Sort(slice) 实现的, 只要 slice 实现了 sort.Interface 的三个方法就可以。 虽然这么说,但是IT技术网排序的方法却有那么好几种。首先一种就是模拟排序 [] int 构造对应的 IntSlice 类型,然后对 IntSlice 类型实现 Interface 的三个方法。

  1、模拟 IntSlice 排序

package main import ( "fmt" "sort" ) type Student struct { Name string Age int } // 按照 Student.Age 从大到小排序 type StudentSlice []Student // 重写 Len() 方法 func (a StudentSlice) Len() int { return len(a) } // 重写 Swap() 方法 func (a StudentSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] } // 重写 Less() 方法, 从大到小排序 func (a StudentSlice) Less(i, j int) bool { return a[j].Age < a[i].Age } func main() { stu := []Student{ {"zhang san", 18}, {"li si", 28}, {"wang wu", 25}, {"zhao liu", 16}, {"oldboy", 20}, } fmt.Println(stu) // 按照 Age 的降序排序 sort.Sort(StudentSlice(stu)) fmt.Println(stu) // 按照 Age 的升序排序 sort.Sort(sort.Reverse(StudentSlice(stu))) fmt.Println(stu) }

  这完全是一种模拟的方式,所以如果懂了 IntSlice 自然就理解这里了,反过来,理解了这里那么 IntSlice 那里也就懂了。

  2、进一步封装,亿华云封装成 SortStudent 方法:

package main import ( "fmt" "sort" ) type Student struct { Name string Age int } type StudentWrapper struct { stu []Student by func(p, q *Student) bool } type SortBy func(p, q *Student) bool func (pw StudentWrapper) Len() int { // 重写 Len() 方法 return len(pw.stu) } func (pw StudentWrapper) Swap(i, j int) { // 重写 Swap() 方法 pw.stu[i], pw.stu[j] = pw.stu[j], pw.stu[i] } func (pw StudentWrapper) Less(i, j int) bool { // 重写 Less() 方法 return pw.by(&pw.stu[i], &pw.stu[j]) } // 封装成 SortStudent 方法 func SortStudent(stu []Student, by SortBy) { sort.Sort(StudentWrapper{stu, by}) } func main() { stu := []Student{ {"zhang san", 18}, {"li si", 28}, {"wang wu", 25}, {"zhao liu", 16}, {"oldboy", 20}, } fmt.Println(stu) sort.Sort(StudentWrapper{stu, func(p, q *Student) bool { return q.Age < p.Age // Age 递减排序 }}) fmt.Println(stu) SortStudent(stu, func(p, q *Student) bool { return p.Name < q.Name // Name 递增排序 }) fmt.Println(stu) }

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 三星A8升级后的全新体验(全方位升级,让你爱不释手)

    三星A8升级后的全新体验(全方位升级,让你爱不释手)

    2025-11-05 11:18

  • 用户在注册域名过程中考虑什么?有什么需要做的?

    用户在注册域名过程中考虑什么?有什么需要做的?

    2025-11-05 11:08

  • 什么因素可以决定企业域名?有什么攻略可以选择?

    什么因素可以决定企业域名?有什么攻略可以选择?

    2025-11-05 08:55

  • 网站域名购买掌握哪几点?新手有什么需要注意的地方?

    网站域名购买掌握哪几点?新手有什么需要注意的地方?

    2025-11-05 08:36

网友点评
精彩导读
1.下载获取字体并解压安装对于开源操作系统而言,Ubuntu平台默认自带很多字体。但通常情况下用户或许对已有字体并不能满足需要。因此,类似Windows系统一样,用户可以在Ubuntu 14.04、14.10或者像Linux Mint之类系统中安装额外的字体。步骤一: 获取字体首先,下载你所选择的字体。用户会现在你或许在考虑下载字体,通过搜索引擎可以给你提供几个免费的字体网站。用户可以先去看看Lost Type的字体(点击下载),Squirrel也是一个下载字体的网站(点击下载),用户都可以从这两个网站找的需要新字体。步骤二:Ubuntu中安装新字体对于用户来讲,下载的字体文件可能是一个压缩包,先解压它大多数字体文件格式是TTF (TrueType字体) 或者OTF (OpenType字体)。无论是哪种格式,双击字体文件后会自动用字体查看器打开。这里用户可以在右上角看到安装选项。值得注意的是:在安装字体时不会看到其他信息。几秒钟后会看到状态变成已安装,表示字体已经安装完毕。安装完毕后,用户就可以在GIMP、Pina等应用中看到你新安装的字体。2.在Ubuntu上一次安装多字体要在Ubuntu中一次安装多个字体,需要在home目录下创建一个.fonts文件夹(假如它不存在的话),并把解压后的TTF和OTF文件复制到这个文件夹内。在文件管理器中进入home目录。按下Ctrl+H 显示Ubuntu中的隐藏文件,右键创建一个文件夹并命名为.fonts。 值得提醒的是在Linux中,文件前面加上“.”意味在普通的视图中都会隐藏。另外,用户可以通过安装字体管理程序,在图形用户界面管理字体。要在Ubuntu中安装字体管理程序,打开终端并输入下面的命令:要卸载字体管理器,使用下面的命令:在此推荐一下文泉驿正黑字体作为具体示例~上图是在 Xubuntu 14.04 自带文本编辑器 Mousepad 里的字体效果。喜欢锐利清晰字体的 Ubuntu 用户,可以安装文泉驿正黑: 复制代码代码如下:sudo apt-get install fonts-wqy-zenhei 然后在系统字体设置里应用“文泉驿点阵正黑”字体即可。

1.下载获取字体并解压安装对于开源操作系统而言,Ubuntu平台默认自带很多字体。但通常情况下用户或许对已有字体并不能满足需要。因此,类似Windows系统一样,用户可以在Ubuntu 14.04、14.10或者像Linux Mint之类系统中安装额外的字体。步骤一: 获取字体首先,下载你所选择的字体。用户会现在你或许在考虑下载字体,通过搜索引擎可以给你提供几个免费的字体网站。用户可以先去看看Lost Type的字体(点击下载),Squirrel也是一个下载字体的网站(点击下载),用户都可以从这两个网站找的需要新字体。步骤二:Ubuntu中安装新字体对于用户来讲,下载的字体文件可能是一个压缩包,先解压它大多数字体文件格式是TTF (TrueType字体) 或者OTF (OpenType字体)。无论是哪种格式,双击字体文件后会自动用字体查看器打开。这里用户可以在右上角看到安装选项。值得注意的是:在安装字体时不会看到其他信息。几秒钟后会看到状态变成已安装,表示字体已经安装完毕。安装完毕后,用户就可以在GIMP、Pina等应用中看到你新安装的字体。2.在Ubuntu上一次安装多字体要在Ubuntu中一次安装多个字体,需要在home目录下创建一个.fonts文件夹(假如它不存在的话),并把解压后的TTF和OTF文件复制到这个文件夹内。在文件管理器中进入home目录。按下Ctrl+H 显示Ubuntu中的隐藏文件,右键创建一个文件夹并命名为.fonts。 值得提醒的是在Linux中,文件前面加上“.”意味在普通的视图中都会隐藏。另外,用户可以通过安装字体管理程序,在图形用户界面管理字体。要在Ubuntu中安装字体管理程序,打开终端并输入下面的命令:要卸载字体管理器,使用下面的命令:在此推荐一下文泉驿正黑字体作为具体示例~上图是在 Xubuntu 14.04 自带文本编辑器 Mousepad 里的字体效果。喜欢锐利清晰字体的 Ubuntu 用户,可以安装文泉驿正黑: 复制代码代码如下:sudo apt-get install fonts-wqy-zenhei 然后在系统字体设置里应用“文泉驿点阵正黑”字体即可。