【JKSJ49-6】数组和切片

74 阅读1分钟

数组的比较

1.必须数组的长度和元素都相同,数组才会相同

代码如下所示

func TestArrayInt(t *testing.T) {
   var arr [3]int
   arr1 := [4]int{1, 2, 3, 4}
   arr3 := [...]int{1, 3, 4, 5}
   arr1[1] = 5
   t.Log(arr[1], arr[2])
   t.Log(arr1, arr3)
}

数组的遍历

代码如下所示

func TestArrayTravel(t *testing.T) {
   arr3 := [...]int{1, 3, 4, 5}
   for i := 0; i < len(arr3); i++ {
      t.Log(arr3[i])
   }
   for _, e := range arr3 {
      t.Log(e)
   }
}

数组的切分

代码如下所示 1.切片没有到-1的这种写法

func TestArraySection(t *testing.T) {
   arr3 := [...]int{1, 2, 3, 4, 5}
   arr3_sec := arr3[3:]
   // 编译错误
   // arr3_sec := arr3[:-1]
   t.Log(arr3_sec)
}

数组 vs 切片

1.数组的容量不会改变,切片的容量可以动态改变
2.切片的改变会改变原有数组的元素,切片的容量是开始位置到结尾
func TestSliceInit(t *testing.T) {
   var s0 []int
   t.Log(len(s0), cap(s0))
   s0 = append(s0, 1)
   t.Log(len(s0), cap(s0))
   s1 := []int{1, 2, 3, 4}
   t.Log(len(s1), cap(s1))
   s2 := make([]int, 3, 5)
   t.Log(len(s2), cap(s2))
   //测试错误,因为没赋值
   //t.Log(s2[3])
   s2 = append(s2, 1)
   t.Log(s2[3])
}

func TestSliceGrowing(t *testing.T) {
   s := []int{}
   for i := 0; i < 10; i++ {
      s = append(s, i)
      t.Log(len(s), cap(s))
   }
}

func TestSliceShareMemory(t *testing.T) {
   year := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
   q2 := year[3:6]
   t.Log(q2, len(q2), cap(q2))
   summer := year[5:8]
   t.Log(summer, len(summer), cap(summer))
   summer[0] = 100
   t.Log(q2)
}