日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言從切片中刪除元素

Go語(yǔ)言并沒(méi)有對(duì)刪除切片元素提供專(zhuān)用的語(yǔ)法或者接口,需要使用切片本身的特性來(lái)刪除元素,根據(jù)要?jiǎng)h除元素的位置有三種情況,分別是從開(kāi)頭位置刪除、從中間位置刪除和從尾部刪除,其中刪除切片尾部的元素速度最快。

成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的云龍網(wǎng)站建設(shè)公司,云龍接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行云龍網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

從開(kāi)頭位置刪除

刪除開(kāi)頭的元素可以直接移動(dòng)數(shù)據(jù)指針:

a = []int{1, 2, 3}
a = a[1:] // 刪除開(kāi)頭1個(gè)元素
a = a[N:] // 刪除開(kāi)頭N個(gè)元素

也可以不移動(dòng)數(shù)據(jù)指針,但是將后面的數(shù)據(jù)向開(kāi)頭移動(dòng),可以用 append 原地完成(所謂原地完成是指在原有的切片數(shù)據(jù)對(duì)應(yīng)的內(nèi)存區(qū)間內(nèi)完成,不會(huì)導(dǎo)致內(nèi)存空間結(jié)構(gòu)的變化):

a = []int{1, 2, 3}
a = append(a[:0], a[1:]...) // 刪除開(kāi)頭1個(gè)元素
a = append(a[:0], a[N:]...) // 刪除開(kāi)頭N個(gè)元素

還可以用 copy() 函數(shù)來(lái)刪除開(kāi)頭的元素:

a = []int{1, 2, 3}
a = a[:copy(a, a[1:])] // 刪除開(kāi)頭1個(gè)元素
a = a[:copy(a, a[N:])] // 刪除開(kāi)頭N個(gè)元素

從中間位置刪除

對(duì)于刪除中間的元素,需要對(duì)剩余的元素進(jìn)行一次整體挪動(dòng),同樣可以用 append 或 copy 原地完成:

a = []int{1, 2, 3, ...}
a = append(a[:i], a[i+1:]...) // 刪除中間1個(gè)元素
a = append(a[:i], a[i+N:]...) // 刪除中間N個(gè)元素
a = a[:i+copy(a[i:], a[i+1:])] // 刪除中間1個(gè)元素
a = a[:i+copy(a[i:], a[i+N:])] // 刪除中間N個(gè)元素

從尾部刪除

a = []int{1, 2, 3}
a = a[:len(a)-1] // 刪除尾部1個(gè)元素
a = a[:len(a)-N] // 刪除尾部N個(gè)元素

刪除開(kāi)頭的元素和刪除尾部的元素都可以認(rèn)為是刪除中間元素操作的特殊情況,下面來(lái)看一個(gè)示例。

【示例】刪除切片指定位置的元素。

package main

import "fmt"

func main() {
    seq := []string{"a", "b", "c", "d", "e"}

    // 指定刪除位置
    index := 2

    // 查看刪除位置之前的元素和之后的元素
    fmt.Println(seq[:index], seq[index+1:])

    // 將刪除點(diǎn)前后的元素連接起來(lái)
    seq = append(seq[:index], seq[index+1:]...)

    fmt.Println(seq)
}

代碼輸出結(jié)果:

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

代碼說(shuō)明如下:

  • 第 1 行,聲明一個(gè)整型切片,保存含有從 a 到 e 的字符串。
  • 第 4 行,為了演示和講解方便,使用 index 變量保存需要?jiǎng)h除的元素位置。
  • 第 7 行,seq[:index] 表示的就是被刪除元素的前半部分,值為 [1 2],seq[index+1:] 表示的是被刪除元素的后半部分,值為 [4 5]。
  • 第 10 行,使用 append() 函數(shù)將兩個(gè)切片連接起來(lái)。
  • 第 12 行,輸出連接好的新切片,此時(shí),索引為 2 的元素已經(jīng)被刪除。

代碼的刪除過(guò)程可以使用下圖來(lái)描述。


圖:切片刪除元素的操作過(guò)程

Go語(yǔ)言中刪除切片元素的本質(zhì)是,以被刪除元素為分界點(diǎn),將前后兩個(gè)部分的內(nèi)存重新連接起來(lái)。

提示

連續(xù)容器的元素刪除無(wú)論在任何語(yǔ)言中,都要將刪除點(diǎn)前后的元素移動(dòng)到新的位置,隨著元素的增加,這個(gè)過(guò)程將會(huì)變得極為耗時(shí),因此,當(dāng)業(yè)務(wù)需要大量、頻繁地從一個(gè)切片中刪除元素時(shí),如果對(duì)性能要求較高的話(huà),就需要考慮更換其他的容器了(如雙鏈表等能快速?gòu)膭h除點(diǎn)刪除元素)。


標(biāo)題名稱(chēng):創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言從切片中刪除元素
轉(zhuǎn)載注明:http://www.5511xx.com/article/dpoehij.html