From 506221df0c1d96feca44b7693a442e8a800d3c19 Mon Sep 17 00:00:00 2001 From: ZGGSONG Date: Thu, 3 Mar 2022 15:33:28 +0800 Subject: [PATCH] array --- Array/array_test.go | 59 +++++++++++++++++++++++++++++++++ Array/main.go | 26 +++++++++++++++ Demo/main.go | 7 ++++ Slice/main.go | 81 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 Array/array_test.go create mode 100644 Array/main.go create mode 100644 Demo/main.go create mode 100644 Slice/main.go diff --git a/Array/array_test.go b/Array/array_test.go new file mode 100644 index 0000000..e16115b --- /dev/null +++ b/Array/array_test.go @@ -0,0 +1,59 @@ +package main + +import ( + "fmt" + "reflect" + "strings" + "testing" +) + +func TestArray(t *testing.T) { + fmt.Println("123") +} + +func TestSum(t *testing.T) { + x := [...]int{1, 2, 3} + sum := 0 + for _, v := range x { + sum += v + } + fmt.Println(sum) +} + +//Newsplit 切割字符串 +//example: +//abc,b=>[ac] +func Newsplit(str, sep string) (des []string) { + index := strings.Index(str, sep) + for index > -1 { + sectionBefor := str[:index] + des = append(des, sectionBefor) + str = str[index+1:] + index = strings.Index(str, sep) + } + //最后1 + des = append(des, str) + return +} + +//测试用例1:以字符分割 +func TestSplit(t *testing.T) { + got := Newsplit("123N456", "N") + want := []string{"123", "456"} + //DeepEqual比较底层数组 + if !reflect.DeepEqual(got, want) { + //如果got和want不一致说明你写得代码有问题 + t.Errorf("The values of %v is not %v\n", got, want) + } + +} + +//测试用例2:以标点符号分割 +func TestPunctuationSplit(t *testing.T) { + got := Newsplit("a:b:c", ":") + want := []string{"a", "b", "c"} + if !reflect.DeepEqual(got, want) { + t.FailNow() //出错就stop别往下测了! + } + +} diff --git a/Array/main.go b/Array/main.go new file mode 100644 index 0000000..338d525 --- /dev/null +++ b/Array/main.go @@ -0,0 +1,26 @@ +package main + +import "fmt" + +func main() { + var a1 [3]bool + + var a2 = [...]int{1, 2, 3} + fmt.Printf("a1: %T\n", a1) + fmt.Println(a2) + + a3 := [...]int{1: 1, 4: 2} + fmt.Println(a3) + + a := [3][2]string{ + {"北京", "上海"}, + {"广州", "深圳"}, + {"成都", "重庆"}, + } + for _, v1 := range a { + for _, v2 := range v1 { + fmt.Printf("%s\t", v2) + } + fmt.Println() + } +} diff --git a/Demo/main.go b/Demo/main.go new file mode 100644 index 0000000..d8fa929 --- /dev/null +++ b/Demo/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("hello") +} diff --git a/Slice/main.go b/Slice/main.go new file mode 100644 index 0000000..df420d5 --- /dev/null +++ b/Slice/main.go @@ -0,0 +1,81 @@ +package main + +import ( + "fmt" + "sort" +) + +func main() { + var a []string + b := []int{} + c := []bool{true, false} + fmt.Println(a) + fmt.Println(b) + fmt.Println(c) + fmt.Println(a == nil) + fmt.Println("===切片===") + + test := []int{5, 4, 3, 8, 6} + testSlice1 := test[1:3] + fmt.Printf("slice1:%v, len: %v, caps: %v\n", testSlice1, len(testSlice1), cap(testSlice1)) + + //切片再切片的结果起始位置在上一个切片的起始位置,high上限未原始数组的容量 + //我的理解:a [1,2,3,4,5,6] + // 切片:b=a[2,4] = [3,4] length=4-2=2 capacity=数组[3,4,5,6]的容量=4 + testSlice2 := testSlice1[0:4] + fmt.Printf("slice2:%v, len: %v, caps: %v\n", testSlice2, len(testSlice2), cap(testSlice2)) + + //capacity=max-low=3 length=high-low=2 + testSlice3 := test[2:4:5] + fmt.Printf("slice3:%v, len:%v, cap:%v\n", testSlice3, len(testSlice3), cap(testSlice3)) + + fmt.Println("===make===") + + sliceMake := make([]bool, 2, 10) + fmt.Printf("make: %v, len: %v, cap: %v\n", sliceMake, len(sliceMake), cap(sliceMake)) + + fmt.Println("===赋值===") + + s1 := make([]int, 3) //[0 0 0] + s2 := s1 //将s1直接赋值给s2,s1和s2共用一个底层数组 + s2[0] = 100 + fmt.Println(s1) //[100 0 0] + fmt.Println(s2) //[100 0 0] + + s11 := []int{1, 3, 5, 7, 9, 0, 2, 4, 6, 8} + s12 := make([]int, 5, 5) + copy(s12, s11) //数据复制到另一片空间 + s11[0] = 100 + fmt.Println(s11) + fmt.Println(s12) + + fmt.Println("===遍历===") + slice4range := []int{1, 3, 5, 6, 4, 2} + for i := 0; i < len(slice4range); i++ { + fmt.Printf("%v ", slice4range[i]) + } + fmt.Println() + for index, value := range slice4range { + fmt.Println(index, value) + } + + fmt.Println("===删除===") + sliceDel := []int{1, 2, 3, 4, 5, 6} + sliceDel = append(sliceDel[:2], sliceDel[3:]...) + fmt.Println(sliceDel) + + var m = make([]string, 5, 10) + for i := 0; i < 10; i++ { + m = append(m, fmt.Sprintf("%v", i)) + } + fmt.Println(m) + + var mm = [...]int{3, 7, 8, 9, 1} + ms := mm[0:len(mm)] + + sort.Slice(ms, func(i, j int) bool { + return ms[i] < ms[j] + }) + + fmt.Printf("Sort: %v\n%v\n", mm, ms) +}