golang将切片或数组根据某个字段进行分组操作
我就废话不多说了,大家还是直接看代码吧~
packagemain import( "fmt" "sort" ) typePersonstruct{ Namestring Ageint } funcmain(){ 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)) } //按某个字段排序 typesortByAge[]Person func(ssortByAge)Len()int{returnlen(s)} func(ssortByAge)Swap(i,jint){s[i],s[j]=s[j],s[i]} func(ssortByAge)Less(i,jint)bool{returns[i].Age=len(list){ break } forj=i+1;j打印结果如下:
分组前的数据:
[{Tom20}{Lily21}{Linda23}{Jass25}{Tonny20}{Pite25}{Paul21}{Kriss27}{Jake23}{Rose20}]
分组后的数据:
[[{Tom20}{Rose20}{Tonny20}][{Lily21}{Paul21}][{Linda23}{Jake23}][{Pite25}{Jass25}][{Kriss27}]]
补充:golang分组和枚举
我就废话不多说了,大家还是直接看代码吧~
packagemain //同时导入多个包 //import“fmt” //import“errors” //同时声明多个常量或者变量,那么可以简化为下面这种分组声明的方式 //constPIfloat32=3.14 //constNAMEstring=“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 ) //遇到一个新的constemun,那么iota就会重置为0,所以h=0 const( h=iota ) //golang设计原则 //大写字母开头的变量,则能被其他包使用的,小写字母开头的变量只能当前包使用拉 //函数也是拉,大写可以被其他包使用,小写只能当前包使用. funcmain(){ err:=errors.New(“hello”) fmt.Println(err) //x=0y=1z=2h=0 //x=0y=1z=6h=0k=6j=5 fmt.Printf("x=%dy=%dz=%dh=%dk=%dj=%d\n",x,y,z,h,k,j) }以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。