golang 中 array,slice,map 三个的理解和区别

array

array是由[n]<byte>定义,其中的n标识array的长度,而<type>标示希望存储的类型。对array的赋值或索引是由方括号完成的:

   var  arr  [10]int

    arr[0] = 21

    arr[1] = 123

    fmt.printf("The first element  is %d\n", arr[0]);

   var  arr  [10]int这样的数组是有固定的大小的。大小是类型的一部分。由于不同的大小的是不同的类型,因此不能改变大小。数组同样是值类型的:将一个数组赋值给另一个数组,会复制所有的元素。尤其当向一个函数传递一个数组的时候,他会获得一个数组的副本,而不是数组的指针。

   声明数组:    var  a  [10]int    (默认其中的值全部是0)

   复合声明:  a := [3]int{1, 2, 3}    也可以写成 a = [....]int{1, 2, 3, 4}, GO会自动的统计元素的个数。

   多维数组:  a := [3][2]int{ {1, 2}, {3, 4}, {5, 6}}

slice

 slice和array接近,不过更加的灵活,可以在新的元素加入的时候增加长度。slice总是指向底层的一个array。slice是一个指向array的指针,这是其与array不同的地方;slice是一个指向array的指针,这是其与array不同的地方;slice是引用类型,这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个array。 例如,如果一个函数需要一个slice参数,在其内对slice元素的修改也会体现在函数调用者中,这和传递底层的array指针类似。

 创建:   sl := make([]int, 10)  创建了一个保存有10个元素的slice。(注意!!引用类型使用make创建)

 slice总是与一个固定长度的array成对出现。其影响slice的容量和长度。可以这样进行创建:

 int :     var  array[m]int

 然后对这个数组进行创建slice:  slice := array[0:n]    (这个slice指向变量array, 从序号0开始,结束在序号n之前,里面是0----n-1,注意数组的下角标是从0开始的)

   内建函数:append 和copy

    append: 向slice追加零值或者其他的x值,并且返回追加后的新的slice。如果原来的slice没有足够的容量,那么append会分配一个足够大的,新的slice来存放原来的slice和后面追加的值。因此返回的slice可能和原来的不是指向同一个array.

  s0 := []int {0, 0}

   s1 := append (s0, 1)               //追加一个元素,s1 = []int {0, 0, 1}

   s1 := append (s0, 1, 2, 3)       //追加多个元素, s1 = []int {0, 0, 1, 2, 3}

   s1 := append (s0, s1)            //追加一个slice



    copy:从源src复制到目标dst, 并且复制的元素的个数。

    var a = [...]int{1, 2, 3, 4, 5, 6, 7, 8}

    var  s = make([]int, 6)

     n1 : = copy(s, a[0:])               ---->n1 = 6, s = =[] int {1, 2, 3, 4, 5, 6}

     n2 := copy(s, s[2:])             ------>n2 = 4, s ==[] int {3, 4, 5, 6,  5, 6}

map

   map可以认为是一个用字符串做索引的数组。定义如下: map [from  type]  <to  type>

   mothday :=  map[string]<int> {

         "jan" : 31, "feb", 29 .......

  }

 只需要声明一个map的时候,可以使用make形式:   mothday  := make(map [string]<int>)

 注意!!当对array, slice, string或者map循环遍历的时候,range会帮助你,每次调用都会返回一个健和对应的值。

 可以对map进行添加,类似于数组,   mothday["mnb"] =  30

 可以进行删除,  delete(mothday, "mnb")

猜你喜欢

转载自blog.csdn.net/qq_38083665/article/details/82113147