<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • go語(yǔ)言切割數(shù)組,go語(yǔ)言遍歷數(shù)組

            go語(yǔ)言數(shù)組,切片和字典的區(qū)別和聯(lián)系

            、數(shù)組 

            成都創(chuàng)新互聯(lián)專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、東坡網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開(kāi)發(fā)、東坡網(wǎng)絡(luò)營(yíng)銷(xiāo)、東坡企業(yè)策劃、東坡品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供東坡建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.jbt999.com

            與其他大多數(shù)語(yǔ)言類(lèi)似,Go語(yǔ)言的數(shù)組也是一個(gè)元素類(lèi)型相同的定長(zhǎng)的序列。

            (1)數(shù)組的創(chuàng)建。

            數(shù)組有3種創(chuàng)建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下:

            復(fù)制代碼代碼如下:

            func test5() {

            var iarray1 [5]int32

            var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5}

            iarray3 := [5]int32{1, 2, 3, 4, 5}

            iarray4 := [5]int32{6, 7, 8, 9, 10}

            iarray5 := [...]int32{11, 12, 13, 14, 15}

            iarray6 := [4][4]int32{{1}, {1, 2}, {1, 2, 3}}

            fmt.Println(iarray1)

            fmt.Println(iarray2)

            fmt.Println(iarray3)

            fmt.Println(iarray4)

            fmt.Println(iarray5)

            fmt.Println(iarray6)

            }

            結(jié)果:

            [0 0 0 0 0]

            [1 2 3 4 5]

            [1 2 3 4 5]

            [6 7 8 9 10]

            [11 12 13 14 15]

            [[1 0 0 0] [1 2 0 0] [1 2 3 0] [0 0 0 0]]

            我們看數(shù)組 iarray1,只聲明,并未賦值,Go語(yǔ)言幫我們自動(dòng)賦值為0。再看 iarray2 和 iarray3 ,我們可以看到,Go語(yǔ)言的聲明,可以表明類(lèi)型,也可以不表明類(lèi)型,var iarray3 = [5]int32{1, 2, 3, 4, 5} 也是完全沒(méi)問(wèn)題的。

            (2)數(shù)組的容量和長(zhǎng)度是一樣的。cap() 函數(shù)和 len() 函數(shù)均輸出數(shù)組的容量(即長(zhǎng)度)。如:

            復(fù)制代碼代碼如下:

            func test6() {

            iarray4 := [5]int32{6, 7, 8, 9, 10}

            fmt.Println(len(iarray4))

            fmt.Println(cap(iarray4))

            }

            輸出都是5。

            (3)使用:

            復(fù)制代碼代碼如下:

            func test7() {

            iarray7 := [5]string{"aaa", `bb`, "可以啦", "叫我說(shuō)什么好", "()"}

            fmt.Println(iarray7)

            for i := range iarray7 {

            fmt.Println(iarray7[i])

            }

            }

            二、切片

            Go語(yǔ)言中,切片是長(zhǎng)度可變、容量固定的相同的元素序列。Go語(yǔ)言的切片本質(zhì)是一個(gè)數(shù)組。容量固定是因?yàn)閿?shù)組的長(zhǎng)度是固定的,切片的容量即隱藏?cái)?shù)組的長(zhǎng)度。長(zhǎng)度可變指的是在數(shù)組長(zhǎng)度的范圍內(nèi)可變。

            (1)切片的創(chuàng)建。

            切片的創(chuàng)建有4種方式:

            1)make ( []Type ,length, capacity )

            2) make ( []Type, length)

            3) []Type{}

            4) []Type{value1 , value2 , ... , valueN }

            從3)、4)可見(jiàn),創(chuàng)建切片跟創(chuàng)建數(shù)組唯一的區(qū)別在于 Type 前的“ [] ”中是否有數(shù)字,為空,則代表切片,否則則代表數(shù)組。因?yàn)榍衅情L(zhǎng)度可變的。如下是創(chuàng)建切片的示例:

            復(fù)制代碼代碼如下:

            func test8() {

            slice1 := make([]int32, 5, 8)

            slice2 := make([]int32, 9)

            slice3 := []int32{}

            slice4 := []int32{1, 2, 3, 4, 5}

            fmt.Println(slice1)

            fmt.Println(slice2)

            fmt.Println(slice3)

            fmt.Println(slice4)

            }

            輸出為:

            [0 0 0 0 0]

            [0 0 0 0 0 0 0 0 0]

            []

            [1 2 3 4 5]

            如上,創(chuàng)造了4個(gè)切片,3個(gè)空切片,一個(gè)有值的切片。

            (2)切片與隱藏?cái)?shù)組:

            一個(gè)切片是一個(gè)隱藏?cái)?shù)組的引用,并且對(duì)于該切片的切片也引用同一個(gè)數(shù)組。如下示例,創(chuàng)建了一個(gè)切片slice0,并根據(jù)這個(gè)切片創(chuàng)建了2個(gè)切片 slice1 和 slice2:

            復(fù)制代碼代碼如下:

            func test9() {

            slice0 := []string{"a", "b", "c", "d", "e"}

            slice1 := slice0[2 : len(slice0)-1]

            slice2 := slice0[:3]

            fmt.Println(slice0, slice1, slice2)

            slice2[2] = "8"

            fmt.Println(slice0, slice1, slice2)

            }

            輸出為:

            [a b c d e] [c d] [a b c]

            [a b 8 d e] [8 d] [a b 8]

            可見(jiàn),切片slice0 、 slice1 和 slice2是同一個(gè)底層數(shù)組的引用,所以slice2改變了,其他兩個(gè)都會(huì)變。

            (3)遍歷、修改切片:

            復(fù)制代碼代碼如下:

            func test10() {

            slice0 := []string{"a", "b", "c", "d", "e"}

            fmt.Println("\n~~~~~~元素遍歷~~~~~~")

            for _, ele := range slice0 {

            fmt.Print(ele, " ")

            ele = "7"

            }

            fmt.Println("\n~~~~~~索引遍歷~~~~~~")

            for index := range slice0 {

            fmt.Print(slice0[index], " ")

            }

            fmt.Println("\n~~~~~~元素索引共同使用~~~~~~")

            for index, ele := range slice0 {

            fmt.Print(ele, slice0[index], " ")

            }

            fmt.Println("\n~~~~~~修改~~~~~~")

            for index := range slice0 {

            slice0[index] = "9"

            }

            fmt.Println(slice0)

            }

            如上,前三種循環(huán)使用了不同的for range循環(huán),當(dāng)for后面,range前面有2個(gè)元素時(shí),第一個(gè)元素代表索引,第二個(gè)元素代表元素值,使用 “_” 則表示忽略,因?yàn)間o語(yǔ)言中,未使用的值會(huì)導(dǎo)致編譯錯(cuò)誤。

            只有一個(gè)元素時(shí),該元素代表索引。

            只有用索引才能修改元素。如在第一個(gè)遍歷中,賦值ele為7,結(jié)果沒(méi)有作用。因?yàn)樵谠乇闅v中,ele是值傳遞,ele是該切片元素的副本,修改它不會(huì)影響原本值,而在第四個(gè)遍歷——索引遍歷中,修改的是該切片元素引用的值,所以可以修改。

            結(jié)果為:

            ~~~~~~元素遍歷~~~~~~

            a b c d e

            ~~~~~~索引遍歷~~~~~~

            a b c d e

            ~~~~~~元素索引共同使用~~~~~~

            aa bb cc dd ee

            ~~~~~~修改~~~~~~

            [9 9 9 9 9]

            (4)、追加、復(fù)制切片:

            復(fù)制代碼代碼如下:

            func test11() {

            slice := []int32{}

            fmt.Printf("slice的長(zhǎng)度為:%d,slice為:%v\n", len(slice), slice)

            slice = append(slice, 12, 11, 10, 9)

            fmt.Printf("追加后,slice的長(zhǎng)度為:%d,slice為:%v\n", len(slice), slice)

            slicecp := make([]int32, (len(slice)))

            fmt.Printf("slicecp的長(zhǎng)度為:%d,slicecp為:%v\n", len(slicecp), slicecp)

            copy(slicecp, slice)

            fmt.Printf("復(fù)制賦值后,slicecp的長(zhǎng)度為:%d,slicecp為:%v\n", len(slicecp), slicecp)

            }

            追加、復(fù)制切片,用的是內(nèi)置函數(shù)append和copy,copy函數(shù)返回的是最后所復(fù)制的元素的數(shù)量。

            (5)、內(nèi)置函數(shù)append

            內(nèi)置函數(shù)append可以向一個(gè)切片后追加一個(gè)或多個(gè)同類(lèi)型的其他值。如果追加的元素?cái)?shù)量超過(guò)了原切片容量,那么最后返回的是一個(gè)全新數(shù)組中的全新切片。如果沒(méi)有超過(guò),那么最后返回的是原數(shù)組中的全新切片。無(wú)論如何,append對(duì)原切片無(wú)任何影響。如下示例:

            復(fù)制代碼代碼如下:

            func test12() {

            slice := []int32{1, 2, 3, 4, 5, 6}

            slice2 := slice[:2]

            _ = append(slice2, 50, 60, 70, 80, 90)

            fmt.Printf("slice為:%v\n", slice)

            fmt.Printf("操作的切片:%v\n", slice2)

            _ = append(slice2, 50, 60)

            fmt.Printf("slice為:%v\n", slice)

            fmt.Printf("操作的切片:%v\n", slice2)

            }

            如上,append方法用了2次,結(jié)果返回的結(jié)果完全不同,原因是第二次append方法追加的元素?cái)?shù)量沒(méi)有超過(guò) slice 的容量。而無(wú)論怎樣,原切片slice2都無(wú)影響。結(jié)果:

            slice為:[1 2 3 4 5 6]

            操作的切片:[1 2]

            slice為:[1 2 50 60 5 6]

            操作的切片:[1 2]

            go語(yǔ)言中實(shí)現(xiàn)切片(slice)的三種方式

            定義一個(gè)切片,然后讓切片去引用一個(gè)已經(jīng)創(chuàng)建好的數(shù)組。基本語(yǔ)法如下:

            索引1:切片引用的起始元素位

            索引2:切片只引用該元素位之前的元素

            例程如下:

            在該方法中,我們未指定容量cap,這里的值為5是系統(tǒng)定義的。

            在方法一中,可以用arr數(shù)組名來(lái)操控?cái)?shù)組中的元素,也可以通過(guò)slice切片來(lái)操控?cái)?shù)組中的元素。切片是直接引用數(shù)組,數(shù)組是事先存在的,程序員是可見(jiàn)的。

            通過(guò) make 來(lái)創(chuàng)建切片,基本語(yǔ)法如下:

            make函數(shù)第三個(gè)參數(shù)cap即容量是可選的,如果一定要自己注明的話,要注意保證cap≥len。

            用該方法可以 指定切片的大小(len)和容量(cap)

            例程如下:

            由于未賦值系統(tǒng)默認(rèn)將元素值置為0,即:

            數(shù)值類(lèi)型數(shù)組:????默認(rèn)值為 0

            字符串?dāng)?shù)組:? ? ? ?默認(rèn)值為 ""

            bool數(shù)組:? ? ? ? ? ?默認(rèn)值為 false

            在方法二中,通過(guò)make方式創(chuàng)建的切片對(duì)應(yīng)的數(shù)組是由make底層維護(hù),對(duì)外不可見(jiàn),即只能通過(guò)slice去訪問(wèn)各個(gè)元素。

            定義一個(gè)切片,直接就指定具體數(shù)組,使用原理類(lèi)似于make的方式。

            例程如下:

            go語(yǔ)言:數(shù)組

            數(shù)組是一個(gè)由 固定長(zhǎng)度 的 特定類(lèi)型元素 組成的序列,一個(gè)數(shù)組可以由零個(gè)或多個(gè)元素組成。 數(shù)組是值類(lèi)型

            數(shù)組的每個(gè)元素都可以通過(guò)索引下標(biāo)來(lái)訪問(wèn),索引下標(biāo)的范圍是從0開(kāi)始到數(shù)組長(zhǎng)度減1的位置,內(nèi)置函數(shù) len() 可以返回?cái)?shù)組中元素的個(gè)數(shù)。

            2.類(lèi)型的打印,結(jié)果的第二種打印方式

            3.對(duì)元素的修改或者賦值

            4.判斷數(shù)組是否相等:長(zhǎng)度、類(lèi)型

            4.數(shù)組的地址:連續(xù)存儲(chǔ)的空間

            5.數(shù)組的賦值、地址、取值

            6.數(shù)組的默認(rèn)值

            7.數(shù)組的初始化

            8.數(shù)組的逆置

            9.求數(shù)組的最大值、最小值、平均值

            10.對(duì)數(shù)組字符串進(jìn)行連接

            11.冒泡排序法的實(shí)現(xiàn)

            12.數(shù)組做函數(shù)的參數(shù)

            13.二維數(shù)組:賦值和地址

            14.二維數(shù)組:打印和輸出

            15. 指針數(shù)組,每一個(gè)元素都是地址

            17.數(shù)組的內(nèi)存分配

            Go語(yǔ)言”奇怪用法“有哪些

            1,go的變量聲明順序是:”先寫(xiě)變量名,再寫(xiě)類(lèi)型名“,此與C/C++的語(yǔ)法孰優(yōu)孰劣,可見(jiàn)下文解釋?zhuān)?/p>

            2,go是通過(guò)package來(lái)組織的(與python類(lèi)似),只有package名為main的包可以包含main函數(shù),一個(gè)可執(zhí)行程序有且僅有一個(gè)main包,通過(guò)import關(guān)鍵字來(lái)導(dǎo)入其他非main包。

            3,可見(jiàn)性規(guī)則。go語(yǔ)言中,使用大小寫(xiě)來(lái)決定該常量、變量、類(lèi)型、接口、結(jié)構(gòu)或函數(shù)是否可以被外部包含調(diào)用。根據(jù)約定,函數(shù)名首字母小寫(xiě)即為private,函數(shù)名首字母大寫(xiě)即為public。

            4,go內(nèi)置關(guān)鍵字(25個(gè)均為小寫(xiě))。

            5,函數(shù)不用先聲明,即可使用。

            6,在函數(shù)內(nèi)部可以通過(guò) := 隱士定義變量。(函數(shù)外必須顯示使用var定義變量)

            7,go程序使用UTF-8編碼的純Unicode文本編寫(xiě)。

            8,使用big.Int的陷阱:

            9,從技術(shù)層面講,go語(yǔ)言的語(yǔ)句是以分號(hào)分隔的,但這些是由編譯器自動(dòng)添加的,不用手動(dòng)輸入,除非需要在同一行中寫(xiě)入多個(gè)語(yǔ)句。沒(méi)有分號(hào)及只需少量的逗號(hào)和圓括號(hào),使得go語(yǔ)言的程序更容易閱讀。

            10,go語(yǔ)言只有一個(gè)循環(huán)結(jié)構(gòu)——for循環(huán)。

            11,go里的自增運(yùn)算符只有——“后++”

            12,go語(yǔ)言中的slice用法類(lèi)似python中數(shù)組,關(guān)于slice的詳細(xì)用法可見(jiàn):

            13,函數(shù)也是一個(gè)值,使用匿名函數(shù)返回一個(gè)值。

            14,函數(shù)閉包的使用,閉包是一個(gè)匿名函數(shù)值,會(huì)引用到其外部的變量。

            go語(yǔ)言中數(shù)組使用的注意事項(xiàng)和細(xì)節(jié)

            1、數(shù)組是多個(gè) 相同類(lèi)型 的數(shù)據(jù)的組合,一個(gè)數(shù)組一旦聲明/定義了,其 長(zhǎng)度是固定的,不能動(dòng)態(tài)變化 。

            2、var arr []int? ? 這時(shí)arr就是一個(gè)slice 切片 。

            3、數(shù)組中的元素可以是任何數(shù)據(jù)類(lèi)型,包括值類(lèi)型和引用類(lèi)型,但是 不能混用 。

            4、數(shù)組創(chuàng)建后,如果沒(méi)有賦值,有默認(rèn)值如下:

            ? ? 數(shù)值類(lèi)型數(shù)組:????默認(rèn)值為 0

            ? ? 字符串?dāng)?shù)組:? ? ? ?默認(rèn)值為 ""

            ? ? bool數(shù)組:? ? ? ? ? ?默認(rèn)值為 false

            5、使用數(shù)組的步驟:

            ? ? (1)聲明數(shù)組并開(kāi)辟空間

            ? ? (3)給數(shù)組各個(gè)元素賦值

            ? ? (3)使用數(shù)組

            6、數(shù)組的下標(biāo)是從0開(kāi)始的。

            7、數(shù)組下標(biāo)必須在指定范圍內(nèi)使用,否則報(bào)panic:數(shù)組越界,比如var arr [5]int的有效下標(biāo)為0~4.

            8、Go的數(shù)組屬于 值類(lèi)型 ,在默認(rèn)情況下是 值傳遞 ,因此會(huì)進(jìn)行值拷貝。 數(shù)組間不會(huì)相互影響。

            9、如想在其他函數(shù)中去修改原來(lái)的數(shù)組,可以使用 引用傳遞 (指針?lè)绞?。

            10、長(zhǎng)度是數(shù)組類(lèi)型的一部分,在傳遞函數(shù)參數(shù)時(shí),需要考慮數(shù)組的長(zhǎng)度,看以下案例:

            題1:編譯錯(cuò)誤,因?yàn)椴荒馨裑3]int類(lèi)型傳遞給[]int類(lèi)型,前者是數(shù)組,后者是切片;

            題2:編譯錯(cuò)誤,因?yàn)椴荒馨裑3]int類(lèi)型傳遞給[4]int類(lèi)型;

            題3:編譯正確,因?yàn)閇3]int類(lèi)型傳給[3]int類(lèi)型合法。

            分享標(biāo)題:go語(yǔ)言切割數(shù)組,go語(yǔ)言遍歷數(shù)組
            瀏覽地址:http://www.jbt999.com/article0/phigoo.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

            成都網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 青草福利| 青娱乐美国1级黄片 | 色哟哟精品www色哟哟 | 天天票天天色天天干 | 区三区日本在线观看视频 |