ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

每日一读 - sort包

2021-10-19 13:32:14  阅读:189  来源: 互联网

标签: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应该插入的位置. 注意, 切片应该是已经增序排列的
  • 自定义类型

    • 排序 

      • func Sort(data Interface)

      • func Stable(data Interface)

      • func Slice(x interface{}, less func(i, j int) bool) // 如果x不是slice, panic

      • func SliceStable(x interface{}, less func(i, j int) bool)

    • 检验是否排序

      • func IsSorted(data Interface) bool

      • func SliceIsSorted(x interface{}, less func(i, j int) bool) // 如果x不是slice, panic

    • 查找

      返回第一个满足 f(i) == true 的集合元素对应的下标i, 如果没找到, 返回n. 注意, 本函数使用的是二分查找, 要求前一半不满足, 后一半满足(均可以为空), 等于需要另外判断
      • func Search(n int, f func(int) bool) int

        x := 23
        i := sort.Search(len(data), func(i int) bool { return data[i] >= x })
        if i < len(data) && data[i] == x {
        	// x is present at data[i]
        } else {
        	// x is not present in data,
        	// but i is the index where it would be inserted.
        }

Types

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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有