day05陣列array

染指未来發表於2024-07-02

陣列

什麼是陣列

  • 陣列,即一維陣列
    • 陣列是容器型資料結構
    • 陣列內的資料。必須是相同資料型別的資料
    • 陣列是需要定義大小的
    • 陣列的大小不可修改
    • 陣列是有序
    • 使用any定義陣列。該型別能接收不同型別的陣列。
package main

import "fmt"

func main() {
	/*
		什麼是陣列?
			-  一維陣列
				- 陣列是容器型資料結構
				- 陣列內的資料。必須是相同資料型別的資料
				- 陣列是需要定義大小的
				- 陣列的大小不可修改
				- 陣列是有序
				- 使用any定義陣列。該型別能接收不同型別的陣列。
	*/

	// 定義陣列。 int型別為0,string型別為空
	var arr01 [4]int
	var arr02 [4]string
	fmt.Println("列印空陣列:", arr01)
	fmt.Println("列印空陣列:", arr02)

	// 陣列賦值使用下標賦值,預設從0開始
	arr01[0] = 1
	arr01[1] = 2
	arr01[2] = 3
	fmt.Println("列印賦值後的陣列:", arr01)

	// 陣列按照下標取值
	fmt.Println("陣列,下標取值:", arr01[0])

	// 陣列的常用方法
	// - len() 獲取陣列長度
	fmt.Println("陣列長度:", len(arr01))
	// - cap() 獲取陣列容量
	fmt.Println("陣列容量:", cap(arr01))

	// 修改陣列某個下標數值
	arr01[0] = 10
	fmt.Println("修改後的陣列:", arr01)

	// 初始化陣列的幾種方式
	// - 1 方式
	var arr03 [10]int
	fmt.Println("初始化陣列1", arr03)

	// - 2 方式
	var arr04 = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println("初始化陣列2", arr04)

	// - 3 方式
	arr05 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println("初始化陣列3", arr05)

	// - 4 方式 ... 自動推導長度,容量
	var arr06 = [...]int{1, 3, 4, 1, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 4}
	fmt.Println("初始化陣列4", arr06)
	fmt.Println("初始化陣列4,長度", len(arr06))
	fmt.Println("初始化陣列4,容量", cap(arr05))

	// -5 方式。 給陣列 某幾個index 下標賦值 {下標:數值,下標:數值,下標:數值....}
	var arr007 [5]int
	arr007 = [5]int{0: 2, 2: 3}
	fmt.Println(arr007)
}

陣列遍歷

  • for i 下標
  • for range 迴圈
  • 下標手動遍歷
package main

import "fmt"

func main() {
	// 遍歷陣列
	// 1. for i 下標
	// 2. for range 迴圈
	// 3. 下標手動遍歷

	var arrErgodic001 = [5]int{1, 2, 3, 4, 5}

	fmt.Println("手動下標取值:", arrErgodic001[0])
	fmt.Println("手動下標取值:", arrErgodic001[1])
	fmt.Println("手動下標取值:", arrErgodic001[2])
	fmt.Println("手動下標取值:", arrErgodic001[3])
	fmt.Println("手動下標取值:", arrErgodic001[4])
	//fmt.Println(arrErgodic001[5]) // 下標溢位。invalid argument: index 5 out of bounds [0:5]

	for i := 0; i < len(arrErgodic001); i++ {
		fmt.Println("for i 迴圈列印:", arrErgodic001[i])
	}

	// for range 自動迭代。【一個接收引數預設獲取的是資料的下標】
	for index, value := range arrErgodic001 {
		// index 表示:資料下標
		// value 表示:該下標對應的資料
		fmt.Println("for range 列印:", index, value)
	}
}

陣列 copy

  • 陣列重新賦值,會複製新的記憶體空間
package main

import "fmt"

func main() {
	// 陣列重新賦值,會複製新的記憶體空間
	var arrCopy = [10]int{1, 2, 3, 4, 5}
	fmt.Println(arrCopy)
	// 陣列變數 記憶體地址指向陣列第一個元素的記憶體地址
	fmt.Printf("%p\n", &arrCopy)    // 0xc0000b8000
	fmt.Printf("%p\n", &arrCopy[0]) // 0xc0000b8000
	fmt.Printf("%p\n", &arrCopy[1]) // 0xc0000b8008
	// 列印陣列型別
	fmt.Printf("%T\n", arrCopy) // [10]int

	arrCopy1 := arrCopy
	fmt.Printf("%p\n", &arrCopy1) // 0xc0000b80f0  新地址
	fmt.Printf("%T\n", arrCopy1)  // [10]int

	// 修改  arrCopy 不影響 arrCopy1
	arrCopy[0] = 10000
	fmt.Println("【值複製】arrCopy", arrCopy)
	fmt.Println("【值複製】arrCopy1", arrCopy1)
}

陣列排序

  • 氣泡排序
package main

import "fmt"

func main() {

	var arrSort = [10]int{16, 64, 23, 45, 67, 21, 22, 33, 1}
	fmt.Printf("%T", arrSort)
	fmt.Println("排序陣列 【氣泡排序】:")

	// 氣泡排序

	// 控制迴圈次數
	for i1 := 1; i1 < len(arrSort); i1++ {
		// n*n-1,比較前後兩個資料的大小
		for j1 := 0; j1 < len(arrSort)-i1; j1++ {
			fmt.Printf("外層:%d, 內層:第%d圈:比較:%d 和 %d\n", i1, j1, arrSort[j1], arrSort[j1+1])
			if arrSort[j1] > arrSort[j1+1] {
				arrSort[j1], arrSort[j1+1] = arrSort[j1+1], arrSort[j1]
			}
			fmt.Println()
			fmt.Printf("【第%d圈】:氣泡排序後的結果:%d\n", i1, arrSort)
			fmt.Println()

		}

	}
	fmt.Println("氣泡排序後的結果:", arrSort)
}

多維陣列

  • 巢狀結構的陣列
package main

import "fmt"

func main() {
	/*
		多維陣列
	*/

	// 定義二維陣列
	twoDimensionalArr := [3][4]int{
		{2, 2, 3, 5},
		{1, 2, 3, 4},
		{1, 2, 3, 7},
	}
	fmt.Println("二維陣列:", twoDimensionalArr)
	fmt.Println("二維陣列取值:", twoDimensionalArr[0])
	fmt.Println("二維陣列取值:", twoDimensionalArr[0][0])

	// for i 遍歷二維陣列
	for i := 0; i < len(twoDimensionalArr); i++ {
		for j := 0; j < len(twoDimensionalArr[i]); j++ {
			fmt.Println("for i【二維陣列】:", twoDimensionalArr[i][j])
		}
	}
	// for range 遍歷二維陣列
	for index, v2 := range twoDimensionalArr {
		fmt.Println("for range【二維陣列】:", index, v2)

	}
	// 定義三維陣列
	threeDimensionalArr := [3][4][2]int{
		{{3, 2}, {3, 4}, {5, 6}, {5, 6}},
		{{1, 2}, {3, 4}, {5, 6}, {5, 6}},
		{{1, 2}, {3, 4}, {5, 6}, {5, 6}},
	}
	fmt.Println("三維陣列:", threeDimensionalArr)
	fmt.Println("三維陣列取值:", threeDimensionalArr[0])
	fmt.Println("三維陣列取值:", threeDimensionalArr[0][0])
	fmt.Println("三維陣列取值:", threeDimensionalArr[0][0][0])

}

相關文章