package main
import "fmt"
func main() {
var q = [3]int{1, 2, 3}
fmt.Println(q[2])
//在數組的定義中,如果在數組長度的位置出現“...”省略號,則表示數組的長度是根據初始化值的個數來計算,
var a = [...]int{2, 2, 2}
fmt.Println(a)
//多維數組
//二維數組
//聲明一個二維數組 二維長度爲 4 和 2
var array [4][2]int
array = [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
fmt.Println(array)
//// 聲明並初始化數組中索引爲 1 和 3 的元素
array = [4][2]int{1: {20, 21}, 3: {40, 41}}
fmt.Println(array)
//聲明並初始化數組中指定的元素
array = [4][2]int{1: {0: 20}, 3: {1: 41}}
fmt.Println(array)
//數組和切片
//切片是對數組的一個連續片段的引用.所以切片是一個引用類型
//這個片段可以是整個數組,也可以是由起始和終止索引標識的一些項的子集,
// 需要注意的是,終止索引標識的項不包括在切片內
//從數組生成切片
var arr = [3]int{1, 2, 3}
fmt.Println(arr, arr[1:2])
var highRiseBuilding [30]int
for i := 0; i < 30; i++ {
highRiseBuilding[i] = i + 1
}
// 區間 嘗試出租一個區間樓層。
fmt.Println(highRiseBuilding[10:15])
// 中間到尾部的所有元素 出租 20 層以上。
fmt.Println(highRiseBuilding[20:])
// 開頭到中間指定位置的所有元素 出租 2 層以下,一般是商用鋪面。
fmt.Println(highRiseBuilding[:2])
//生成新的切片變量
//字符串切片
var strArr []string
//整型切片
var numArr []int
//聲明一個空切片
var emptyArr = []int{}
//輸出這三個切片
fmt.Println(strArr, numArr, emptyArr)
//切片判斷爲空
fmt.Println(strArr == nil)
fmt.Println(numArr == nil)
//空切片 爲false 已經被分配到了內存,但沒有元素,因此和 nil 比較時是 false。
fmt.Println(emptyArr == nil)
//使用make 函數來構造切片
//make( []Type, size, cap )
//其中 Type 是指切片的元素類型,size 指的是爲這個類型分配多少個元素,cap 爲預分配的元素數量,
// 這個值設定後不影響 size,只是能提前分配空間,降低多次分配空間造成的性能問題。
//如果需要動態創建一個切片 可以使用make 內置函數
var makeArr = make([]int, 2)
fmt.Println(makeArr)
makeArr_A := make([]int, 2, 5)
fmt.Println(makeArr_A)
//使用append 爲切片添加元素
var appendArr []int
appendArr = append(appendArr, 1) //追加一個
appendArr = append(appendArr, 1, 2, 3) //追加多個
appendArr = append(appendArr, []int{1, 2, 3}...) //追加一個切片
fmt.Println(appendArr)
//除了在切片的尾部追加 也可以在切片的前面追加
appendArr_1 := []int{1, 2, 3}
appendArr_1 = append([]int{1, 2, 3}, appendArr_1...)
fmt.Println(appendArr_1)
//在切片開頭添加元素一般都會導致內存的重新分配,
// 而且會導致已有元素全部被複制 1 次,因此,從切片的開頭添加元素的性能要比從尾部追加元素的性能差很多。
//切片的複製
//copy可以將一個數組切片 複製到另一個數組切片中
//copy函數的使用格式
//copy( destSlice, srcSlice []T) int
//其中 srcSlice 爲數據來源切片,destSlice 爲複製的目標(也就是將 srcSlice 複製到 destSlice),
// 目標切片必須分配過空間且足夠承載複製的元素個數,並且來源和目標的類型必須一致,copy() 函數的返回值表示實際發生複製的元素個數
//下面的代碼展示了使用 copy() 函數將一個切片複製到另一個切片的過程:
//slice1 := []int{1, 2, 3, 4, 5}
//slice2 := []int{5, 4, 3}
//copy(slice2, slice1) // 只會複製slice1的前3個元素到slice2中
//copy(slice1, slice2) // 只會複製slice2的3個元素到slice1的前3個位置
//go語言的多維切片
//聲明一個二維切片
var slice [][]int
//爲二維切片 賦值
slice = [][]int{{10}, {100, 200}}
fmt.Println(slice)
//取值
fmt.Println(slice[1][:])
//
}
golang 數組與切片分析
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.