当前位置: 首页 > wzjs >正文

秦皇岛工程建设信息网站公众号平台网站开发

秦皇岛工程建设信息网站,公众号平台网站开发,如何组建一个小型局域网,宿迁房产网58同城网二手房Go语言的 sort 模块提供了对切片和自定义数据结构的排序功能,支持基本类型排序、自定义排序规则、稳定排序和二分查找。以下是 sort 模块的核心方法及示例说明: 1. 基本类型排序 sort.Ints、sort.Float64s、sort.Strings 直接对基本类型的切片进行排序…

Go语言的 sort 模块提供了对切片和自定义数据结构的排序功能,支持基本类型排序、自定义排序规则、稳定排序和二分查找。以下是 sort 模块的核心方法及示例说明:


1. 基本类型排序

sort.Intssort.Float64ssort.Strings

直接对基本类型的切片进行排序。

package mainimport ("fmt""sort"
)func main() {// 整数切片排序ints := []int{3, 1, 4, 1, 5}sort.Ints(ints)fmt.Println(ints) // 输出: [1 1 3 4 5]// 浮点数切片排序floats := []float64{3.14, 2.71, 1.0}sort.Float64s(floats)fmt.Println(floats) // 输出: [1 2.71 3.14]// 字符串切片排序(字典序)strs := []string{"banana", "apple", "cherry"}sort.Strings(strs)fmt.Println(strs) // 输出: [apple banana cherry]
}

2. 自定义排序规则

sort.Slicesort.SliceStable

通过自定义比较函数对切片排序。

  • sort.Slice:不保证相等元素的顺序(非稳定排序)。
  • sort.SliceStable:保留相等元素的原始顺序(稳定排序)。
type Person struct {Name stringAge  int
}func main() {people := []Person{{"Alice", 30},{"Bob", 25},{"Charlie", 35},{"David", 25},}// 按年龄排序(非稳定)sort.Slice(people, func(i, j int) bool {return people[i].Age < people[j].Age})fmt.Println(people) // 输出顺序可能为 [Bob David Alice Charlie]// 按年龄排序(稳定)sort.SliceStable(people, func(i, j int) bool {return people[i].Age < people[j].Age})fmt.Println(people) // 输出顺序保持 [Bob David Alice Charlie]
}

3. 实现 sort.Interface 接口

通过实现 LenLessSwap 方法,自定义数据结构的排序逻辑。

type PersonList []Person// 实现 sort.Interface 接口
func (p PersonList) Len() int           { return len(p) }
func (p PersonList) Less(i, j int) bool { return p[i].Age < p[j].Age }
func (p PersonList) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }func main() {people := PersonList{{"Alice", 30},{"Bob", 25},{"Charlie", 35},}sort.Sort(people)fmt.Println(people) // 输出: [{Bob 25} {Alice 30} {Charlie 35}]
}

4. 逆序排序

sort.Reverse

反转排序逻辑,实现从大到小排序。

func main() {ints := []int{3, 1, 4, 1, 5}sort.Sort(sort.Reverse(sort.IntSlice(ints)))fmt.Println(ints) // 输出: [5 4 3 1 1]
}

5. 检查是否已排序

sort.IsSorted

验证切片是否已按顺序排序。

func main() {ints := []int{1, 2, 3}fmt.Println(sort.IsSorted(sort.IntSlice(ints))) // 输出: trueunsorted := []int{3, 1, 2}fmt.Println(sort.IsSorted(sort.IntSlice(unsorted))) // 输出: false
}

6. 二分查找

sort.Search

在已排序的切片中查找目标值,返回最小的满足条件的索引。

func main() {ints := []int{1, 3, 5, 7, 9}target := 5// 查找第一个 >= target 的索引index := sort.Search(len(ints), func(i int) bool {return ints[i] >= target})if index < len(ints) && ints[index] == target {fmt.Printf("找到 %d,索引为 %d\n", target, index) // 输出: 找到 5,索引为 2} else {fmt.Println("未找到")}
}

7. 自定义复杂排序

结合多个字段排序。

func main() {people := []Person{{"Alice", 30},{"Bob", 25},{"Charlie", 30},}// 先按年龄排序,年龄相同按名字字典序排序sort.Slice(people, func(i, j int) bool {if people[i].Age == people[j].Age {return people[i].Name < people[j].Name}return people[i].Age < people[j].Age})fmt.Println(people) // 输出: [{Bob 25} {Alice 30} {Charlie 30}]
}

总结

  • 核心方法
    • 基本排序IntsFloat64sStrings
    • 自定义排序SliceSliceStableSort(需实现 sort.Interface)。
    • 逆序排序Reverse
    • 检查排序IsSorted
    • 二分查找Search
  • 适用场景
    • 对基本类型切片快速排序。
    • 按自定义规则排序结构体切片。
    • 在有序数据中高效查找元素。
  • 注意事项
    • sort.Slice 更灵活,无需实现完整接口。
    • sort.Search 要求切片必须已按升序排列。

文章转载自:

http://tf1FxWkP.qkskm.cn
http://l5dJuJrz.qkskm.cn
http://LbTvSPil.qkskm.cn
http://KYPuYCfk.qkskm.cn
http://S1QKzRxV.qkskm.cn
http://bB0H6mPJ.qkskm.cn
http://jUlrwvx2.qkskm.cn
http://uE8ptnLp.qkskm.cn
http://8T0WMkNp.qkskm.cn
http://05fGKO36.qkskm.cn
http://tJhwOgzK.qkskm.cn
http://DZQYBDDu.qkskm.cn
http://ZcUGLQlT.qkskm.cn
http://eNlHZKBp.qkskm.cn
http://K3WnxUqx.qkskm.cn
http://DLvQ6BIP.qkskm.cn
http://p5r3vMOK.qkskm.cn
http://zFRHwZXI.qkskm.cn
http://6tB2fDg1.qkskm.cn
http://xHix93vP.qkskm.cn
http://4wfIT8Yv.qkskm.cn
http://uHULtGhD.qkskm.cn
http://teM5LOvz.qkskm.cn
http://HF31vpfy.qkskm.cn
http://iScKDf2f.qkskm.cn
http://LDzy9AFD.qkskm.cn
http://4iAaIZOm.qkskm.cn
http://GxWkmDrh.qkskm.cn
http://TJBT84Pw.qkskm.cn
http://cbmQ0lq1.qkskm.cn
http://www.dtcms.com/wzjs/627331.html

相关文章:

  • 温州地区做网站如何做优化网站排alexa优化
  • synology做网站小视频网站建设
  • 怎么做卖车网站网站流量统计分析报告
  • 青岛网站建设推进做企业网站需要的人
  • 百度制作企业网站多少钱做网站和做软件一样吗
  • 郑州网站建设推广渠道网站建设与维护下载
  • h5网站制作平台有哪些成都园林设计公司推荐
  • 企业网站的建设内容陕西网站建设
  • 电子商务网站建设程序的开发诸城做网站的
  • 网站设计制作报价图片欣赏阿里巴巴网站建设改图片
  • 重庆专业网站建设电商平台的设计
  • 网站空间购买 北京网页设计与网站开发pdf
  • 门户网站建设管理工作aso优化吧
  • 搭理彩票网站开发襄阳住房和城乡建设局网站首页
  • 代做网站多少钱推销网站
  • 游戏平台网站开发可以分为( )
  • 贵州定制型网站建设物流网站建设费用
  • 众筹网站开发北京网站开发学习
  • 如何选择邯郸网站建设wordpress制作主题教程
  • 建设360导航网站的目的是什么黑马程序员线上课程
  • 网站树状型结构优化校园二手网站的建设方案
  • html5单页面网站建设wordpress国外主题安装
  • 国税网站页面建设中网址大全123上网导航
  • 公司网站建设youyi51网页设计与制作读书心得体会1000字
  • 学网站开发有什么好处上海一网
  • 怎么看出是模板网站北京的软件公司集中在哪个区
  • 有一个域名做网站一个网站策划需要多少钱
  • 网页设计制作网站模板免费网站规划方案模板
  • 英文网站 常用字体杭州网站的优化
  • 外贸假发 网站wordpress趋势图插件