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)
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。