1. 程式人生 > >Go(day3[數組])

Go(day3[數組])

go(day3[數組])

數組:var 變量名[len]type

使用場景:

  • 固定需求的時候,使用數組,不可超出指定長度

  • 長度也是數組類型的一部分

  • 底層內存空間是連續的

  • 用來存儲常量

  • 數組是一種特殊的字典.....

  • 數組寫入,賦值的方式, 數組[索引]=值

  • 數組是值類型,如果copy成另外一個數組,那修改這個數組,原來的數組並不會改變

數組初始化:

????定義:????var 變量名 [len]type

  • 第一種:?

    • var?a[5]?int?=?[5]int{1,2,3,4,5}

  • 第二種:

    • ceshi?:=[5]int{1,3,4,5}
  • 第三種

    • var?b?=?[5]int{1,3}
  • 第四種(當不可知長度的時候使用 ...),需要註意的是在切片中也有這種用法,不過含義不一樣

    • var?c?=?[...]int{1,3,4,5,10}

?

示例:

var?a[5]int

var?a[5]string

var?a[5]float32

var?a[5]bool

訪問數組中的元素:

? 使用下標訪問:?a[0]訪問第一個元素。長度為5的數組訪問如下: a[0], a[1], a[2], a[3], a[4]

數組中的長度:

????var a[10]int

????lengh :=len(a)

示例代碼拆分部分:

  1. 數組循環:

    1. 格式化%p,用來打印內存地址

    2. & 符號,取變量地址

    3. 盡量用變量來循環

    4. var?a?[10]int
      
      for?i?:=0;i<len(a);i++{
      ???fmt.Printf("%p\n",&a[i])
      }
    5. length:=len(a)?數組長度


  2. 數組初始化:

    1. 定義數組的時候,默認值都是0

    2. 產生另外一個數組,修改這個數組,並不會對原數組進行修改

    3. func?test2()??{
      ???var?a[5]int??=?[5]int?{1,2,3,4,5}
      ???var?b[5]?int
      ???b?=?a
      ???fmt.Printf("%v\n",b)
      ???b[0]?=?200
      ???fmt.Printf("%v\n",b)
      ???fmt.Printf("%v\n",a)
      
      }
  3. 數組定義:

    1. 聲明數組的時候,需要定義長度和類型!!!

      1. 寫法:變量[長度]類型 = [長度]類型[值]

    2. 數組賦值:指定下標來指定元素賦值

    3. %#以go的方式打印

    4. var?d?[5]string?=?[5]string{1:"abc",4:"zcq"}
      //%#??以go的方式打印!!!
      fmt.Printf("%#%v\n",d)
      
      fmt.Printf("%v\n",a,b,c)
  4. 二維數組

    1. var a[8][2]int

    2. func?test4()??{
      ???//二維數組
      ???var?a[4][2]int
      ???for?i:=0;i<4;i++{
      ??????for?j:=0;i<2;j++{
      ?????????a[i][i]?=?(i+1)?*(j+1)
      ??????}
      ???}
      ???for?i:=0;i<4;i++{
      ??????for?j:=0;i<2;j++{
      ?????????fmt.Printf("%d",a[i][j])
      ??????}
      ??????fmt.Println()
      ???}
      }
  5. 數組賦值:隨機數字放入數組

    1. 切記:go是強類型語言,所以類型如果不一樣,是編譯不過去的

    2. 使用隨機數模塊,使用time模塊

      1. r?:=?rand.New(rand.NewSource(time.Now().Unix())
    3. func?test5()??{
      ???//隨機數字放入數組
      ???r?:=?rand.New(rand.NewSource(time.Now().Unix()))
      ???var?five?[100]int
      ???//數組?通過索引來賦值
      ???for?i:=0;i<len(five);i++{
      ??????//賦值操作
      ??????five[i]=r.Int()
      ??????//取值操作
      ??????fmt.Printf("%d\n",five[i])
      ???}
      ???fmt.Printf("%d\n",five)
      }
  6. 數組賦值:隨機字符串放入數組

    1. go裏面是utf-8編碼

    2. Sprintf 格式化並返回格式化後的字符串,可直接賦值!!!

    3. func?test6()??{
      ???
      ???var?a?[100]string
      
      ???var?b?string?=?"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
      
      ???for?i:=0;i<len(a);i++{
      ??????var?str?string
      ??????for?j:=0;j<len(b);j++{
      ?????????index?:=rand.Intn(len(b))
      ?????????//Sprintf?格式化並返回格式化後的字符串
      ?????????str?=?fmt.Sprintf("%s%c",str,b[index])
      ??????}
      ??????a[i]?=?str
      ??????fmt.Printf("a[%d]=%s\n",i,a[i])
      
      ???}
      }



Go(day3[數組])