在go語言中,可以利用Slice(切片)的特性來實現陣列元素的刪除操作。刪除方法:1、利用append()實現刪除,語法「append(list[:刪除索引], list[(刪除索引+1):]...)」;2、利用copy()實現刪除,語法「list[:copy(list, list[索引:])]」;3、利用len()實現刪除,語法「list[:len(list)-N]」。
php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
在go語言中,可以利用Slice(切片)特性來實現陣列元素的刪除操作。切片(slice)是對陣列的一個連續片段的參照,所以切片是一個參照型別(因此更類似於 C/C++ 中的陣列型別,或者 Python 中的 list 型別),這個片段可以是整個陣列,也可以是由起始和終止索引標識的一些項的子集,需要注意的是,終止索引標識的項不包括在切片內。
Go語言利用切片刪除陣列元素
Go語言並沒有對刪除切片元素提供專用的語法或者介面,需要使用切片本身的特性來刪除元素,根據要刪除元素的位置有三種情況,分別是從開頭位置刪除、從中間位置刪除和從尾部刪除,其中刪除切片尾部的元素速度最快。【相關推薦:Go視訊教學、】
從開頭位置刪除
刪除開頭的元素可以直接行動資料指標:
a = []int{1, 2, 3}
a = a[1:] // 刪除開頭1個元素
a = a[N:] // 刪除開頭N個元素
登入後複製
也可以不行動資料指標,但是將後面的資料向開頭移動,可以用 append 原地完成(所謂原地完成是指在原有的切片資料對應的記憶體區間內完成,不會導致記憶體空間結構的變化):
a = []int{1, 2, 3}
a = append(a[:0], a[1:]...) // 刪除開頭1個元素
a = append(a[:0], a[N:]...) // 刪除開頭N個元素
登入後複製
還可以用 copy() 函數來刪除開頭的元素:
a = []int{1, 2, 3}
a = a[:copy(a, a[1:])] // 刪除開頭1個元素
a = a[:copy(a, a[N:])] // 刪除開頭N個元素
登入後複製
從中間位置刪除
對於刪除中間的元素,需要對剩餘的元素進行一次整體挪動,同樣可以用 append 或 copy 原地完成:
a = []int{1, 2, 3, ...}
a = append(a[:i], a[i+1:]...) // 刪除中間1個元素
a = append(a[:i], a[i+N:]...) // 刪除中間N個元素
a = a[:i+copy(a[i:], a[i+1:])] // 刪除中間1個元素
a = a[:i+copy(a[i:], a[i+N:])] // 刪除中間N個元素
登入後複製
從尾部刪除
a = []int{1, 2, 3}
a = a[:len(a)-1] // 刪除尾部1個元素
a = a[:len(a)-N] // 刪除尾部N個元素
登入後複製
刪除開頭的元素和刪除尾部的元素都可以認為是刪除中間元素操作的特殊情況,下面來看一個範例。
陣列刪除範例
【範例】刪除切片指定位置的元素。
package main
import "fmt"
func main() {
seq := []string{"a", "b", "c", "d", "e"}
// 指定刪除位置
index := 2
// 檢視刪除位置之前的元素和之後的元素
fmt.Println(seq[:index], seq[index+1:])
// 將刪除點前後的元素連線起來
seq = append(seq[:index], seq[index+1:]...)
fmt.Println(seq)
}
登入後複製
程式碼輸出結果:
程式碼說明如下:
第 1 行,宣告一個整型切片,儲存含有從 a 到 e 的字串。
第 4 行,為了演示和講解方便,使用 index 變數儲存需要刪除的元素位置。
第 7 行,seq[:index] 表示的就是被刪除元素的前半部分,值為 [1 2],seq[index+1:] 表示的是被刪除元素的後半部分,值為 [4 5]。
第 10 行,使用 append() 函數將兩個切片連線起來。
第 12 行,輸出連線好的新切片,此時,索引為 2 的元素已經被刪除。
程式碼的刪除過程可以使用下圖來描述。
更多程式設計相關知識,請存取:!!
以上就是golang陣列怎麼刪除元素的詳細內容,更多請關注TW511.COM其它相關文章!