标签:sort string people int 每日 bool func 一读 data
Overview
Package sort provides primitives for sorting slices and user-defined collections.
sort包提供对各切片[float64, int, string]和用户定义的数据类型的排序
Function
-
内置类型
注意各函数的命名, 此处跟在类型后面的s代表的是复数[切片], 还有用的是Are-
排序
默认增序 -
检验是否排序
-
查找
返回x的第一个位置, 如果x不存在, 那就返回x应该插入的位置. 注意, 切片应该是已经增序排列的
-
-
自定义类型
-
排序
-
检验是否排序
-
查找
返回第一个满足 f(i) == true 的集合元素对应的下标i, 如果没找到, 返回n. 注意, 本函数使用的是二分查找, 要求前一半不满足, 后一半满足(均可以为空), 等于需要另外判断
-
Types
- Interface
type Interface interface { // 集合中数据的个数 Len() int // 稳定性通过sort包下的方法来处理, 注意NaN // 当true时, i排在j前面 Less(i, j int) bool // go中的交换非常简单 Swap(i, j int) }
- Float64Slice
-
type Float64Slice []float64
-
func (x Float64Slice) Len() int
-
func (x Float64Slice) Less(i, j int) bool
-
func (p Float64Slice) Search(x float64) int
-
func (x Float64Slice) Sort()
-
func (x Float64Slice) Swap(i, j int)
-
- IntSlice
- StringSlice
-
type StringSlice []string
-
func (x StringSlice) Len() int
-
func (x StringSlice) Less(i, j int) bool
-
func (p StringSlice) Search(x string) int
-
func (x StringSlice) Sort()
-
func (x StringSlice) Swap(i, j int)
-
Example
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("%s: %d", p.Name, p.Age)
}
type ByAge []Person
func (a ByAge) Len() int { return len(a) }
func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func main() {
people := []Person{
{"Bob", 31},
{"John", 42},
{"Michael", 17},
{"Jenny", 26},
}
fmt.Println(people)
sort.Sort(ByAge(people))
fmt.Println(people)
sort.Slice(people, func(i, j int) bool {
return people[i].Age > people[j].Age
})
fmt.Println(people)
}
标签:sort,string,people,int,每日,bool,func,一读,data 来源: https://blog.csdn.net/Lu0L1n9/article/details/120843969
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。