学完之后做一些小练习
练习
-
创建一个[]int 切片 , 将切片重复的内容去除并且返回[]int 切片. 例如:
[]int{1,2,2,3,4,4,5,6,7,7} => []int{1,2,3,4,5,6,7}
2.创建一个[][]int这样的二维切片, 可以将它变成一维切片, 例如:
[][]int{{1,2}, {3,4,5},{6,7,8}} => []int{1,2,3,4,5,6,7,8}
3.创建一个接受[]int切片和列数量的函数, 并且返回一个[][]int切片, 例如:
[]int{1,2,3,4,5} 如果指定列数量为2 =>[][]int{{1,2}, {3,4}, {5,0}}
第一题
// 方法一 利用中间状态
func unique(m []int) []int {
s := make([]int, 0)
for _, value := range m {
//首先定义一个状态
status := true
for _, v := range s {
if (value == v) {
//如果有相同的值就改变状态值
status = false
break
}
}
if status {
s = append(s, value)
}
}
return s
}
// 方法二 利用map的特性 => key值唯一性
func unique2(m[]int) []int {
s := make([]int, 0)
smap := make(map[int]int)
for _, value := range m {
//计算map长度
length := len(smap)
smap[value] = 1
//比较map长度, 如果map长度不相等, 说明key不存在
if len(smap) != length {
s = append(s, value)
}
}
return s
}
func main() {
fmt.Println(unique(s))
fmt.Println(unique2(s))
}
测试
s := []int{1,2,2,3,6,8,1,6,10,10,9,9,9,9,9,9,9,9,103,8}
//结果
[1 2 3 6 8 10 9 103]
[1 2 3 6 8 10 9 103]
第二题
func merge(m [][]int) []int {
res := make([]int, 0)
for _, value := range m {
res = append(res, value...)
}
return res
}
func main() {
fmt.Println(merge(s))
}
test
s := [][]int{{1,2}, {3,4,5},{6,7,8}}
[1 2 3 4 5 6 7 8] // 结果
第三题
func qie(m []int, n int) [][]int {
res := [][]int{}
len := len(m)
last := 0
for i:=1; i<=len;i++ {
if (i % n ==0) {
last = i
res = append(res,m[i-n:i])
} else if (i == len) {
res = append(res, m[last:len])
}
}
return res
}
func main() {
fmt.Println(qie(s, 3))
}
test
s :=[]int{1,2,3,4,5}
[[1 2 3] [4 5]] //输出
本作品采用《CC 协议》,转载必须注明作者和本文链接
@zhouzhou 是的, 一般都是用len来测定,我这里就是做做例子的