標籤:tab 數組初始化 長度 依次 ann one 一個 order unicode
Go 語言數組聲明需要指定元素類型及元素個數,文法格式如下:
var variable_name [SIZE] variable_type
以上為一維數組的定義方式。數組長度必須是整數且大於 0。例如以下定義了數組 balance 長度為 10 類型為 float32:
var balance [10] float32
以下示範了數組初始化:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
初始化數組中 {} 中的元素個數不能大於 [] 中的數字。
如果忽略 [] 中的數字不設定數組大小,Go 語言會根據元素的個數來設定數組的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
該執行個體與上面的執行個體是一樣的,雖然沒有設定數組的大小。
balance[4] = 50.0
與c語言一樣, 索引從0開始
通過索引來訪問數組元素
多維陣列聲明方式
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
var identifier []type
var slice1 []type = make([]type, len)
也可以簡寫為
slice1 := make([]type, len)
- 可以為切片指定容量,其中capacity為選擇性參數
- make([]T, length, capacity)
s :=[] int {1,2,3 }
直接初始化切片,[]表示是切片類型,{1,2,3}初始化值依次是1,2,3.其cap=len=3
s := arr[:]
初始化切片s,是數組arr的引用
s := arr[startIndex:endIndex]
將arr中從下標startIndex到endIndex-1 下的元素建立為一個新的切片
s := arr[startIndex:]
預設endIndex時將表示一直到arr的最後一個元素
s := arr[:endIndex]
預設startIndex時將表示從arr的第一個元素開始
s1 := s[startIndex:endIndex]
通過切片s初始化切片s1
s :=make([]int,len,cap)
通過內建函數make()初始化切片s,[]int 標識為其元素類型為int的切片
len(slice1) |
返回切片長度,返回length |
cap(slice1) |
返回切片容量,返回capacity |
空切片 |
一個切片在未初始化錢預設為null,長度為0 |
切片截取 |
見初始化切片部分 |
append(slice1, x) |
在slice1後添加元素元素x(可添加多個) |
copy(slice1, slice2) |
拷貝slice2的內容到slice1 |
樣本:
package main
import "fmt"
func main() {
var numbers []int
printSlice(numbers)
/* 允許追加空切片 */
numbers = append(numbers, 0)
printSlice(numbers)
/* 向切片添加一個元素 */
numbers = append(numbers, 1)
printSlice(numbers)
/* 同時添加多個元素 */
numbers = append(numbers, 2,3,4)
printSlice(numbers)
/* 建立切片 numbers1 是之前切片的兩倍容量*/
numbers1 := make([]int, len(numbers), (cap(numbers))*2)
/* 拷貝 numbers 的內容到 numbers1 */
copy(numbers1,numbers)
printSlice(numbers1)
}
func printSlice(x []int){
fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
Go 語言中 range 關鍵字用於for迴圈中迭代數組(array)、切片(slice)、通道(channel)或集合(map)的元素。在數組和切片中它返回元素的索引值,在集合中返回 key-value 對的 key 值。
樣本:
package main
import "fmt"
func main() {
//這是我們使用range去求一個slice的和。使用數組跟這個很類似
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println("sum:", sum)
//在數組上使用range將傳入index和值兩個變數。上面那個例子我們不需要使用該元素的序號,所以我們使用空白符"_"省略了。有時侯我們確實需要知道它的索引。
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)
}
}
//range也可以用在map的索引值對上。
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
fmt.Printf("%s -> %s\n", k, v)
}
//range也可以用來枚舉Unicode字串。第一個參數是字元的索引,第二個是字元(Unicode的值)本身。
for i, c := range "go" {
fmt.Println(i, c)
}
}
Go語言數組,切片