zoukankan      html  css  js  c++  java
  • Go基础之--排序和查找操作

    排序操作主要都在sort包中,导入就可以使用了
    import("sort")

    常用的操作

    sort.Ints:对整数进行排序
    sort.Strings:对字符串进行排序
    sort.Float64s:对浮点数进行排序

    使用例子:

    package main
    
    import (
        "sort"
        "fmt"
    )
    
    func main() {
        // 对整数进行排序
        var s = []int{2,3,5,10,20,1,0}
        sort.Ints(s)
        fmt.Println(s)
    
        //对字符串排序
        var b = []string{"cc","yy","dd","ee","zz"}
        sort.Strings(b)
        fmt.Println(b)
    
        // 对浮点数排序
        var d = []float64{9.1,1.2,3,2,1.9,2.2,10.1}
        sort.Float64s(d)
        fmt.Println(d)
    }

    同样还有以下几个常用的查找操作

    sort.SearchInts(a[]int,b int):从整数切片a中查找b的索引位置
    sort.SearchFloat64s(a[]float64,b float64):从浮点切片中查找b的索引位置
    sort.Strings(a[]strings,b string):从字符切片中查找b的索引位置

    使用例子如下:

    package main
    
    import (
        "sort"
        "fmt"
    )
    
    func main() {
        // 从有序的整数切片中获取某个整数所在的索引
        var a = []int{1,2,3,4,5}
        res := sort.SearchInts(a,2)
        fmt.Println(res)
        // 从有序的浮点数切片中获取某个浮点数的索引
        var b = []float64{1.1,10.8,23.1,40.6,43.9}
        res2 := sort.SearchFloat64s(b,43.9)
        fmt.Println(res2)
    
    
        // 从有序的字符串切片中获取某个字符串的索引
        var c = []string{"aa","bb","cc","dd"}
        res3:= sort.SearchStrings(c,"cc")
        fmt.Println(res3)
    
    }

    特殊排序(也是接口的一个应用)

    在sort包中对于基本数据类型如:int,float64,string等的排序都已经提供了上面提到的方法,但是对于特殊的数据类型,例如:map,struct等排序我们如何排序这里就需要用到sort.Sort方法
    官网地址:https://golang.google.cn/pkg/sort/#Sort
    如下图:

    当我们点开Interface可以看到如下:

    从上图我们可以看出Interface其实是一个接口类型,只要我们事先了文档中说的Len(),Less(i,j int)bool,Swap(i,j int)就实现了Interface这个接口,同样的我们就可以调用sort.Sort方法,通过下面的例子来理解

    package main
    
    import (
        "fmt"
        "math/rand"
        "sort"
    )
    
    type Student struct{
        name string
        age int
        score float32
    }
    
    type StudentSlice []*Student
    
    func(p StudentSlice)Len()int{
        return len(p)
    }
    
    func(p StudentSlice)Less(i,j int)bool{
        return p[i].age > p[j].age
    }
    
    func(p StudentSlice)Swap(i,j int){
        p[i],p[j] = p[j],p[i]
    }
    
    func main() {
        var studentArr StudentSlice
        for i:=0;i<10;i++{
            var s = &Student{
                name:fmt.Sprintf("赵%d",i),
                age:rand.Intn(100),
                score:rand.Float32()*100,
            }
            studentArr = append(studentArr,s)
        }
        fmt.Println("排序前:")
        for i:=0;i<len(studentArr);i++{
            fmt.Println(studentArr[i])
        }
    
        sort.Sort(studentArr)
        fmt.Println("排序后:")
        for i:=0;i<len(studentArr);i++{
            fmt.Println(studentArr[i])
        }
    }
  • 相关阅读:
    LeetCode 1245. Tree Diameter
    LeetCode 1152. Analyze User Website Visit Pattern
    LeetCode 1223. Dice Roll Simulation
    LeetCode 912. Sort an Array
    LeetCode 993. Cousins in Binary Tree
    LeetCode 1047. Remove All Adjacent Duplicates In String
    LeetCode 390. Elimination Game
    LeetCode 1209. Remove All Adjacent Duplicates in String II
    LeetCode 797. All Paths From Source to Target
    LeetCode 1029. Two City Scheduling
  • 原文地址:https://www.cnblogs.com/zhaof/p/8454256.html
Copyright © 2011-2022 走看看