1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從0開始學(xué)Golang之?dāng)?shù)組使用

        共 2155字,需瀏覽 5分鐘

         ·

        2022-02-15 11:08

        數(shù)組的含義

        數(shù)組是「相同類型」的變量的集合。也可以理解為「內(nèi)存地址連續(xù)」的一組變量的集合。

        數(shù)據(jù)結(jié)構(gòu)

        go-array1

        數(shù)組的定義

        基本格式

        //?指定初始值
        數(shù)組名稱?:=?[數(shù)組長(zhǎng)度]數(shù)組類型?{初始值1,初始值2,......,初始值n}
        //?初始化一個(gè)數(shù)組
        var?數(shù)組名?[數(shù)組長(zhǎng)度]數(shù)組類型

        情況分析

        1. 數(shù)組定義時(shí)長(zhǎng)度和類型不能省略。如果長(zhǎng)度是"...",此時(shí)數(shù)組的長(zhǎng)度會(huì)根據(jù)初始值的元素個(gè)數(shù)而定。

        2. 數(shù)組的長(zhǎng)度可以是一個(gè)「常量表達(dá)式」,但是編譯階段的數(shù)組長(zhǎng)度值必須是一個(gè)整數(shù)類型的值,不能是其他的類型。比如編譯后的值是一個(gè)字符串的0("0"),這種是錯(cuò)誤的。

        3. 數(shù)組的小標(biāo)是從0開始的。數(shù)組可以創(chuàng)建一個(gè)空數(shù)組,也可以創(chuàng)建一個(gè)分配好的值的數(shù)據(jù)。

        4. 數(shù)組的類型和數(shù)組的長(zhǎng)度是數(shù)組中的一部分,因此如果類型相同并且數(shù)組元素也相同的數(shù)組,但是長(zhǎng)度不一樣,是不同的數(shù)組類型。

        //?這兩個(gè)數(shù)組不是不是同一類型的數(shù)組
        var?arrray1?=?[10]int?{1,?2}
        var?arrray2?=?[11]int?{1,?2}
        //?這兩組數(shù)組是同一類型的數(shù)組
        var?arrray1?=?[10]int?{1,?2}
        var?arrray2?=?[...]int?{1,?2}
        1. 當(dāng)未設(shè)置初始值時(shí),根據(jù)數(shù)組的長(zhǎng)度和數(shù)組的類型,編譯時(shí)自動(dòng)設(shè)置默認(rèn)值。如果設(shè)置的是"...",編譯時(shí)則默認(rèn)根據(jù)類型自動(dòng)設(shè)置一個(gè)初始值。

        默認(rèn)值

        1. 當(dāng)數(shù)組類型是數(shù)字類型時(shí),初始值是0,

        2. 當(dāng)數(shù)組類型是string,初始值為空,

        3. 當(dāng)數(shù)組的類型是bool類型時(shí),初始值為false

        代碼演示

        func?IndexArray()?{
        ?//?長(zhǎng)度和初始值都不設(shè)置,打印一個(gè)空數(shù)組,[]
        ?array1?:=?[...]int{}
        ?fmt.Println(array1)
        ?//?長(zhǎng)度設(shè)置,初始值不設(shè)置,打印一個(gè)長(zhǎng)度為1,初始值為0的數(shù)組,[0]
        ?array2?:=?[1]int{}
        ?fmt.Println(array2)
        ?//?長(zhǎng)度不設(shè)置,設(shè)置初始值,打印出初始值[1?2]
        ?array3?:=?[...]int{1,2}
        ?fmt.Println(array3)
        ?//?長(zhǎng)度和初始值都設(shè)置,打印出初始值[1?2?3?4]
        ?array4?:=?[4]int{1,2,3,4}
        ?fmt.Println(array4)
        ?//?長(zhǎng)度設(shè)置,初始值設(shè)置的個(gè)數(shù)小于長(zhǎng)度,未設(shè)置的初始值根據(jù)數(shù)組類型編譯時(shí)自動(dòng)設(shè)置默認(rèn)值,打印出[1?2?0?0]
        ?array5?:=?[4]int{1,2}
        ?fmt.Println(array5)
        ?//?長(zhǎng)度設(shè)置,指定索引設(shè)置初始值,其他未設(shè)置初始值的編譯時(shí)自動(dòng)設(shè)置默認(rèn)值,打印出[0?0?0?0?0?1]
        ?array6?:=?[6]int{5:?1}
        ?fmt.Println(array6)
        ?//?長(zhǎng)度和初始值設(shè)置,指定索引,打印出[2?2?2]
        ?array7?:=?[3]int{0:2,1:2,2:2}
        ?fmt.Println(array7)
        }

        多維數(shù)組

        多維數(shù)組定義

        var?數(shù)組名稱?[數(shù)組長(zhǎng)度][二維的長(zhǎng)度]....[n維的長(zhǎng)度]?數(shù)組類型
        1. 不管是多少維度的數(shù)組,數(shù)據(jù)類型必須和定義時(shí)保持一致。

        代碼演示

        //?多維數(shù)組的定義
        func?MoreArray()?{
        ?var?array1?[1][2]int
        ?var?array2?=?[1][2]int{
        ??{1,?2},
        ?}
        ?//?正確定義
        ?var?array3?=?[3][2][3]int{
        ??{{1,?2,?3},?{3,?2,?1}},
        ?}
        ?//?正確定義
        ?var?array3?=?[3][2][3]int{
        ??{
        ???{1,?2,?3},?
        ???{3,?2,?1}},
        ?}
        ?//?錯(cuò)誤定義
        ?var?array3?=?[3][2][3]int{
        ??{
        ????{1,?2,?3},?
        ????{3,?2,?1},
        ??},
        ?}
        }
        //?output
        [[[1?2?3]?[3?2?1]]?[[0?0?0]?[0?0?0]]?[[0?0?0]?[0?0?0]]]
        ?

        多維數(shù)組的常見集中情況和上面一維數(shù)組的常見集中情況一樣,但是有如下不同的一個(gè)地方。多維數(shù)組的頂層必須設(shè)置長(zhǎng)度

        ?
        //?多維數(shù)組需要注意的地方
        //?錯(cuò)誤的定義方式
        var?array3?=?[...][2][3]int{
        ????{{1,?2,?3},?{3,?2,?1}},
        }
        //?正確的定義方式(注意第二行結(jié)尾的","不能省略)
        var?array3?=?[][2][3]int{
        ????{{1,?2,?3},?
        ????{3,?2,?1}},
        }
        //output
        [
        ???[[1?2?3]?[3?2?1]]
        ???[[0?0?0]?[0?0?0]]?
        ???[[0?0?0]?[0?0?0]]
        ]

        數(shù)組的常用操作

        循環(huán)

        1. for方式
        func?LoopArray()?{
        ?array?:=?[4]int{1,2,3,4}
        ?len?:=?len(array)
        ?for?i?:=?0;?i?len;?i++?{
        ??fmt.Printf("數(shù)組array的索引%d對(duì)應(yīng)的值是%d",?i,?array[i])
        ??fmt.Println()
        ?}
        }
        1. range方式
        arr?:=?[...]int{1,?2,?3,?4}
        ?for?index,?value?:=?range?arr?{
        ??fmt.Println(index,?value)
        ?}

        計(jì)算長(zhǎng)度

        len?:=?len(數(shù)組名)
        ?

        當(dāng)數(shù)組是一個(gè)多維數(shù)組時(shí),直接使用len(數(shù)組名),計(jì)算的是頂層的長(zhǎng)度

        ?

        賦值

        數(shù)組名[下標(biāo)]?=?值
        array?:=?[4]int{1,2,3}
        array[3]?=?100

        比較

        如果兩個(gè)數(shù)組類型相同(包括數(shù)組的長(zhǎng)度,數(shù)組中元素的類型)的情況下,我們可以直接通過(guò)較運(yùn)算符(==和!=)來(lái)判斷兩個(gè)數(shù)組是否相等,只有當(dāng)兩個(gè)數(shù)組的所有元素都是相等的時(shí)候數(shù)組才是相等的,不能比較兩個(gè)類型不同的數(shù)組,否則程序?qū)o(wú)法完成編譯。

        a?:=?[2]int{1,?2}
        b?:=?[...]int{1,?2}
        c?:=?[2]int{1,?3}
        fmt.Println(a?==?b,?a?==?c,?b?==?c)?//?"true?false?false"
        d?:=?[3]int{1,?2}
        fmt.Println(a?==?d)?//?編譯錯(cuò)誤:無(wú)法比較?[2]int ==?[3]int

        數(shù)組與函數(shù)的使用

        func?函數(shù)名(形參名稱?[數(shù)組長(zhǎng)度]數(shù)組類型)?函數(shù)返回值?{
        ????//?函數(shù)體
        }
        ?

        形參中,函數(shù)的長(zhǎng)度為可寫

        ?
        //?數(shù)組與函數(shù)的使用
        func?Function(arr?[]?int)?int?{
        ????return?len(arr)
        }

        Function([5]int{})

        排序

        冒泡排序

        //?從大到小進(jìn)行排序
        func?BubbleSort()?{

        ?array?:=?[...]int{2,9,3,5,1,2}
        ?len?:=?len(array)
        ?fmt.Println(array)

        ?for?i?:=?1;?i?len;?i++?{//?控制外層循環(huán)次數(shù)
        ??for?j?:=?0;?j?len-i;?j++?{?//?控制內(nèi)部每次循環(huán)個(gè)數(shù)
        ???if?array[j]?1]?{
        ????tmp?:=?array[j]
        ????array[j]?=?array[j+1]
        ????array[j+1]?=?tmp
        ???}
        ??}
        ?}
        ?fmt.Println(array)
        }

        插入排序

        //?插入排序
        func?InsertSort()?{
        ?array?:=?[...]int{2,9,3,5,1,2}
        ?len?:=?len(array)
        ?fmt.Println(array)
        ?//?var?j?int?=?0
        ?//?for?i?:=?1;?i?
        ?//??tmp?:=?array[i]
        ?//??for?j?=?i;?j?>?0?&&?tmp?
        ?//???array[j]?=?array[j?-?1]
        ?//??}
        ?//??array[j]?=?tmp
        ?//?}
        ?for?i?:=?1;?i?len
        ;?i++?{//?控制外層循環(huán)個(gè)數(shù)
        ??tmp?:=?array[i]
        ??for?j?:=?i-1;?j?>=?0;?j--?{//?針對(duì)已經(jīng)排序好的數(shù)組再次排序
        ???if?tmp?>?array[j]?{
        ????array[j+1]?=?array[j]
        ????array[j]?=?tmp
        ???}
        ??}
        ?}
        ?fmt.Println(array)
        }


        瀏覽 69
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日韩欧美天堂 | 偷拍呻吟高潮91 | 国产v日韩 | 色哟哟 国产精品色哟哟 | 色欲天天网 | 午夜寂寞视频 | 国产乱╳╳AⅤ毛片 | 玩两个有奶水的少妇 | 在线成人毛片 | 国产一级做a爱免费视频 |