例子一:
golang 数组分割
需求:给定一个数组和一个正整数,要求把数组分割成多个正整数大小的数组,如果不够分,则最后一个数组分到剩余的所有元素。
示例1: 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],正整数:2 期望结果: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]] 示例2: 数组:[1, 2, 3, 4, 5, 6, 7, 8, 9],正整数:2 期望结果: [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
代码
package main import ( "fmt" ) func main(){ arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9,10} //[[1 2] [3 4] [5 6] [7 8] [9 10]] fmt.Println(arr) //[1 2 3 4 5 6 7 8 9 10] //arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} //[[1 2] [3 4] [5 6] [7 8] [9]] res:= arrayInGroupsOf(arr,2) fmt.Println(res) } func arrayInGroupsOf(arr []int, num int64) [][]int { max := int64(len(arr)) //判断数组大小是否小于等于指定分割大小的值,是则把原数组放入二维数组返回 if max <= num { return [][]int{arr} } //获取应该数组分割为多少份 var quantity int64 if max%num == 0 { quantity = max / num } else { quantity = (max / num) + 1 } //声明分割好的二维数组 var segments = make([][]int, 0) //声明分割数组的截止下标 var start, end, i int64 for i = 1; i <= quantity; i++ { end = i*num if i != quantity { segments = append(segments, arr[start:end]) } else { segments = append(segments, arr[start:]) } start = i*num } return segments }
例子二
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}]]