Golang における配列の簡単な分析

青灯夜游
リリース: 2022-12-06 19:08:17
転載
5491 人が閲覧しました

この記事では Golang について説明し、Go 言語の基礎となる配列について説明します。

Golang における配列の簡単な分析

[プログラミング チュートリアルの推奨事項: プログラミング教育]

1. 配列定義:

配列は、同じデータ型の要素のコレクションです。 Go言語では宣言時から配列が決まり、使用中に配列メンバーを変更することはできますが、配列のサイズを変更することはできません。基本構文:

// 定义一个长度为3元素类型为int的数组a
var a [3]int
ログイン後にコピー

グループの長さは定数である必要があり、長さは配列型の一部です。一度定義すると長さを変更することはできません。

var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型
ログイン後にコピー

配列は添字を通じてアクセスできます。添字は 0 から始まります。最後の要素の添字は len-1 です。アクセスは範囲外です。 (添字が法定範囲外) の場合、範囲外アクセスが発生し、パニックが発生します。

2. 配列の初期化

①配列を初期化する場合、初期化リストを使用して配列要素の値を設定できます。

func main() {
	var testArray [3]int                        //数组会初始化为int类型的零值
	var numArray = [3]int{1, 2}                 //使用指定的初始值完成初始化
	var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化
	fmt.Println(testArray)                      //[0 0 0]
	fmt.Println(numArray)                       //[1 2 0]
	fmt.Println(cityArray)                      //[北京 上海 深圳]
}
ログイン後にコピー

② 上記の方法に従って、指定された初期値が配列の長さと一致していることを確認します。一般に、初期値の数に基づいてコンパイラに配列の長さを推測させることができます。

func main() {
	var testArray [3]int
	var numArray = [...]int{1, 2}
	var cityArray = [...]string{"北京", "上海", "深圳"}
	fmt.Println(testArray)                          //[0 0 0]
	fmt.Println(numArray)                           //[1 2]
	fmt.Printf("type of numArray:%T\n", numArray)   //type of numArray:[2]int
	fmt.Println(cityArray)                          //[北京 上海 深圳]
	fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}
ログイン後にコピー

インデックス値を指定して配列を初期化することもできます

func main() {
	a := [...]int{1: 1, 3: 5}
	fmt.Println(a)                  // [0 1 0 5]
	fmt.Printf("type of a:%T\n", a) //type of a:[4]int
}
ログイン後にコピー

3. 配列の走査

配列のメソッドを走査するには 2 つの方法があります:

func main() {
	var a = [...]string{"北京", "上海", "深圳"}
	// 方法1:for循环遍历
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i])
	}

	// 方法2:for range遍历
	for index, value := range a {
		fmt.Println(index, value)
	}
}
ログイン後にコピー

4. 多次元配列

Go 言語は多次元配列をサポートしています. ここでは例として 2 次元配列を取り上げます (配列は入れ子になっています)配列内)。

2 次元配列の定義

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
	fmt.Println(a[2][1]) //支持索引取值:重庆
}
ログイン後にコピー

2 次元配列の走査

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	for _, v1 := range a {
		for _, v2 := range v1 {
			fmt.Printf("%s\t", v2)
		}
		fmt.Println()
	}
}


输出:

北京	上海	
广州	深圳	
成都	重庆
ログイン後にコピー

注: 多次元配列 最初のレベル のみが ... を使用してコンパイラに配列の長さを推定させることができます

//支持的写法
a := [...][2]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},
}
//不支持多维数组的内层使用...
b := [3][...]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},
ログイン後にコピー

5。配列は値ですtype

配列は値型であり、代入とパラメータの受け渡しにより配列全体がコピーされます。したがって、コピーの値を変更しても、それ自体の値は変わりません。

func modifyArray(x [3]int) {
	x[0] = 100
}

func modifyArray2(x [3][2]int) {
	x[2][0] = 100
}
func main() {
	a := [3]int{10, 20, 30}
	modifyArray(a) //在modify中修改的是a的副本x
	fmt.Println(a) //[10 20 30]
	b := [3][2]int{
		{1, 1},
		{1, 1},
		{1, 1},
	}
	modifyArray2(b) //在modify中修改的是b的副本x
	fmt.Println(b)  //[[1 1] [1 1] [1 1]]
}
ログイン後にコピー

ヒント:

  • メモリは常に初期化されるため、配列では「==」、「!=」演算子がサポートされます。

  • [n]*T はポインタ配列を表し、*[n]T は配列ポインタを表します。

##End:

技術交換グループに参加する必要がある学生はWeChat#に私を追加できることをもう一度お知らせください fangdongdong_25、フロントエンド エンジニア コミュニケーション グループ に参加する必要がある場合は、「フロントエンド」に注意してください 、go バックエンド コミュニケーション グループに参加する必要がある場合、 、「バックエンドに行く」ことに注意してください

【関連する推奨事項:

Go ビデオ チュートリアル ]

以上がGolang における配列の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート