zoukankan      html  css  js  c++  java
  • go语言基础教程2

    array

    数组声明--var arr [10]int,array由[n]<type>定义。n表示数组大小,type表示数组类型

    声明且初始化--arr := [3]int{1,2,3}或者不写大小var arr := [...]int{1,2,3}或者var arr =  [3]int{1,2,3},如果不写大小可以用三个点来表示,go会自动识别,var arr[3]int默认是初始化为0。

    ps:记住:=和=之间的区别,如果是:=不需要var,如果是=需要var

    二维数组初始化a := [2][2]int{ [2]int{1,2}, [2]int{3,4} },a := [2][2]int{ [...]int{1,2}, [...]int{3,4} },a := [2][2]int{ {1,2}, {3,4} }默认里面的类型就是int

    数组同样是值类型的:将一个数组赋值给另一个数组,会复制所有的元素。尤其是当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。

    slice

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

    slice 总是与一个固定长度的array 成对出现。其影响slice 的容量和长度

    arr := [10]int{1,2,3}
    slice := arr[0:5]
    slice1 := append(slice,4,5,6)
    fmt.Printf("slice1 len:%d, slice1 cap:%d\n",len(slice1),cap(slice1))
    fmt.Printf(
    "slice len:%d, slice cap:%d\n",len(slice),cap(slice)) fmt.Printf("arr[0]=%d,arr[1]=%d,arr[2]=%d,arr[3]=%d,arr[6]=%d\n",arr[0],arr[1],arr[2],arr[3],arr[6])

    arr[6] = 5,说明slice和slice1都指向了arr。更改slice和slice1将更改arr。

    函数append 向slice s 追加零值或其他x 值,并且返回追加后的新的、与s 有相同类型的slice。如果s 没有足够的容量存储追加的值,append 分配一个足够大的、新的slice 来存放原有slice 的元素和追加的值。因此,返回的slice 可能指向不同的底层array

    也就是说当slice指向一个arr时,如果通过append增加slice的容量,如果增加的值的个数没有超过arr的长度,slice仍旧指向arr,如果超过了arr的长度,将分配一个新的slice来存放原来的slice。

    make

    可以通过make来创建一个长度为n的slice--sl := make([]int,6)

    map

     1 package main
     2 
     3 import "fmt"
     4 
     5 func main() {
     6     monthdays := map[string]int{
     7     "Jan": 31, "Feb": 28, "Mar": 31, 
     8     "Apr": 30, "May": 31, "Jun": 30, 
     9     "Jul": 31, "Aug": 31, "Sep": 30, 
    10     "Oct": 31, "Nov": 30, "Dec": 31,   //<--逗号是必须的
    11     }   
    12 
    13     fmt.Printf("%d\n", monthdays["Dec"])
    14     year := 0
    15     for month,days := range monthdays {
    16         fmt.Printf("month :%s\n",month)
    17         year += days
    18     }   
    19     fmt.Printf("Numbers of days in a year: %d\n", year)
    20     var value int 
    21     var ok bool
    22     value, ok = monthdays["Jan"] //value将取到值,而ok则判断值是否真的取到
    23     if ok == true {
    24         fmt.Printf("value %d exists in map\n",value)
    25     }   
    26 }
  • 相关阅读:
    Codeforces Round #260 (Div. 2)
    面试题:给定数组a,找到最大的j-i, 使a[j]>a[i]
    ssh自动输入密码脚本 切换目录脚本
    make工作时的执行步骤
    Codeforces Round #259 (Div. 2)
    Codeforces Round #258 (Div. 2)
    如何在半径为1的圆中随机选取一个点
    面试中常问的有关随机选取k个数的总结
    topcoder SRM 628 DIV2 BracketExpressions
    topcoder SRM 628 DIV2 BishopMove
  • 原文地址:https://www.cnblogs.com/GODYCA/p/3065051.html
Copyright © 2011-2022 走看看