ホームページ  >  記事  >  バックエンド開発  >  Go 言語のスライスについて話しましょう

Go 言語のスライスについて話しましょう

青灯夜游
青灯夜游転載
2022-07-04 20:51:142315ブラウズ

この記事では、golang - スライスの可変長「配列」について紹介します。

Go 言語のスライスについて話しましょう

golang スライス (スライス)

(1) スライスの定義

スライスは、同じタイプの要素の可変長シーケンスです。これは、配列タイプに基づくカプセル化の層です。非常に柔軟性があり、自動拡張をサポートしています。

スライスは参照型であり、その内部構造にはアドレス、長さ、容量が含まれます。スライスは通常、データのコレクションを迅速に操作するために使用されます。 [関連する推奨事項: Go ビデオ チュートリアル ]

スライスの作成と配列の作成の唯一の違いは、Type の前の "[]" に数字があるかどうかです。空の場合は、 、それはスライスを意味し、それ以外の場合は配列を表します。スライスは可変長であるため

var a []string  //声明一个字符串切片
var b = []int{1,2,3} //声明一个整数类型切片并初始化
var c = []bool{false,true} //声明一个bool类型并且初始化

実際の状況では、スライスは配列の一部である

num:=[3]int{0,1,2}
//:前后表示数组内部的索引
sc1:=num[:] //获取数组的全部
sc2:=num[0:2] //左闭右开,取到的是[0,1]
sc3:=num[1:] //取到的是[2]
sc4:=num[:1]  //取到的是[0]

(2) make関数を使用して作成します。スライス

ここからは前のステートメントに対応します。スライスの容量は可変であり、make 関数を使用して実現できます。スライスの本質は、基になる配列をカプセル化することです。これには、基になる配列へのポインタ、スラ​​イスの長さ (len)、スライスの容量 (cap) の 3 つの情報が含まれます。

// make([]T, size, cap)
sc=make([]int,2,10)
fmt.Println(sc) // [0 0]
fmt.Println(len(sc)) // len表示切片存储元素的长度
fmt.Println(cap(sc)) // cap表示最大可以存储的容量

(3) スライスの走査

sc:=[]int{1,2,3}
//普通for循环遍历
for i:=0;i<len(sc);i++{
	fmt.Println(s[i])
}
//for range遍历
for index,value:=range s{
	fmt.Println(index,value)
}

(4) append() メソッド

Go 言語組み込み関数 append() を使用すると、要素をスライスに動的に追加できます。一度に 1 つの要素を追加することも、複数の要素を追加することも、別のスライスから要素を追加することもできます (その後に...)。

var s1 []int  //定义切片s1
s1 = append(s1,1)  //在切片s1后面添加一个1的元素
s1 = append(s1,2,3,4) //在切片s1后面继续添加2,3,4
s2:=[]int{5,6,7}  //定义切片s2
s1 = append(s1,s2) //把切片s2中的元素追加到切片s1中

(5)copy メソッド

Go 言語の組み込み copy() 関数を使用すると、あるスライスのデータを別のスライス空間にすばやくコピーできます。 () 関数の使用形式は以下のとおりです:

a:=[]int{1,2,3,4,5}
b:=make([]int,5,5)
copy(b,a) //把a切片中的元素copy到b切片中的元素
fmt.Println(b) //[1,2,3,4,5]
b[0]=1000
fmt.Println(b) // [1000,2,3,4,5]

ここに注意が必要な問題があります。実際の開発ではこのような問題があります

a := []int{1, 2, 3, 4, 5}
b := a
fmt.Println(a) //[1 2 3 4 5]
fmt.Println(b) //[1 2 3 4 5]
b[0] = 1000
fmt.Println(a) //[1000 2 3 4 5]
fmt.Println(b) //[1000 2 3 4 5]
/*
由于切片是引用类型,所以a和b其实都指向了同一块内存地址。
修改b的同时a的值也会发生变化。
*/

(6) 賢く削除要素

Go 言語ではスライス要素を削除する特別な方法はありませんが、スライス自体の特性を利用して要素を削除できます。コードは次のとおりです:

// 从切片中删除元素
a := []int{30, 31, 32, 33, 34, 35, 36, 37}
// 要删除索引为2的元素
a = append(a[:2], a[3:]...)
fmt.Println(a) //[30 31 33 34 35 36 37]
/*
总结一下就是:要从切片a中删除索引为index的元素,
操作方法是a = append(a[:index], a[index+1:]...)
*/

プログラミング関連の知識については、プログラミング ビデオをご覧ください。 !

以上がGo 言語のスライスについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。