golang之集合(array,slices和map)

来源:互联网 发布:女神联盟女神升级数据 编辑:程序博客网 时间:2024/05/21 17:01

   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")

原创粉丝点击