• 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])
        }
    }
  • 相关阅读:
    java—连连看-实现封装
    java—连连看GUI
    连连看--产生随机数
    勇者斗恶龙
    在ctex环境下利用Metapost作图
    [leetcode] Binary Tree Postorder Traversal
    [leetcode] Binary Tree Maximum Path Sum
    [leetcode] Binary Tree Level Order Traversal II
    [leetcode] Binary Tree Level Order Traversal
    [leetcode] Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/zhaof/p/8454256.html
Copyright © 2020-2023  润新知