• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang将切片或数组根据某个字段进行分组操作

    我就废话不多说了,大家还是直接看代码 吧~

    package main
    import (
     "fmt"
     "sort"
    )
    type Person struct {
     Name string
     Age int
    }
    func main() {
     p1 := Person{"Tom",20}
     p2 := Person{"Lily",21}
     p3 := Person{"Linda",23}
     p4 := Person{"Jass",25}
     p5 := Person{"Tonny",20}
     p6 := Person{"Pite",25}
     p7 := Person{"Paul",21}
     p8 := Person{"Kriss",27}
     p9 := Person{"Jake",23}
     p10 := Person{"Rose",20}
     personList := []Person{}
     personList = append(personList,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10)
     fmt.Println("分组前的数据:",personList)
     fmt.Println("分组后的数据:",splitSlice(personList))
    }
    //按某个字段排序
    type sortByAge []Person
    func (s sortByAge) Len() int   { return len(s) }
    func (s sortByAge) Swap(i, j int)  { s[i], s[j] = s[j], s[i] }
    func (s sortByAge) Less(i, j int) bool { return s[i].Age  s[j].Age}
    //切片分组
    func splitSlice(list []Person) [][]Person {
     sort.Sort(sortByAge(list))
     returnData := make([][]Person,0)
     i:= 0
     var j int
     for {
     if i >= len(list) {
     break
     }
     for j = i + 1; j len(list)  list[i].Age == list [j].Age; j++ {}
     returnData = append(returnData,list[i:j])
     i = j
     }
     return returnData
    }
    

    打印结果如下:

    分组前的数据:

    [{Tom 20} {Lily 21} {Linda 23} {Jass 25} {Tonny 20} {Pite 25} {Paul 21} {Kriss 27} {Jake 23} {Rose 20}]

    分组后的数据:

    [[{Tom 20} {Rose 20} {Tonny 20}] [{Lily 21} {Paul 21}] [{Linda 23} {Jake 23}] [{Pite 25} {Jass 25}][{Kriss 27}]]

    补充:golang分组和枚举

    我就废话不多说了,大家还是直接看代码吧~

    package main
    //同时导入多个包
    //import “fmt”
    //import “errors”
    //同时声明多个常量或者变量,那么可以简化为下面这种分组声明的方式
    //const PI float32 = 3.14
    //const NAME string = “hello”
    //分组声明
    import(
    “fmt”
    “errors”
    )
    //常量声明大写哈,和c/c++一样
    const(
    PI = 3.14
    NAME = “HELLO”
    )
    //枚举enum,和c/c++一样哈都是从0开始
    // iota枚举,默认等于0,同一个分组内没声明一个变量那么iota加1 所以 y=1, z=2, j = 5
    const(
    // x = iota
    // y = iota
    // z = iota
    x = iota
    y = iota
    z = 6
    k  
    p
    j = iota
    )
    // 遇到一个新的const emun,那么iota就会重置为0,所以h = 0
    const(
    h = iota
    )
    //golang设计原则
    //大写字母开头的变量,则能被其他包使用的,小写字母开头的变量只能当前包使用拉
    //函数也是拉,大写可以被其他包使用,小写只能当前包使用.
    func main() {
    err := errors.New(“hello”)
    fmt.Println(err)
    //x=0 y=1 z=2 h=0
    // x=0 y=1 z=6 h=0 k=6 j=5
    fmt.Printf("x=%d y=%d z=%d h=%d k=%d j=%d\n", x,y,z,h,k,j)
    }

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • GO语言数组和切片实例详解
    • 理解Golang中的数组(array)、切片(slice)和map
    • 深入理解Go语言中的数组和切片
    • go结构体嵌套的切片数组操作
    • go特性之数组与切片的问题
    • 简单聊一聊Go语言中的数组和切片
    上一篇:golang定时器和超时的使用详解
    下一篇:以alpine作为基础镜像构建Golang可执行程序操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang将切片或数组根据某个字段进行分组操作 golang,将,切片,或,数组,根据,