例子一:
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
}
原文鏈接:https://blog.csdn.net/MCJPAO/article/details/108431657
例子二
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}]]