Go語言數組,切片

來源:互聯網
上載者:User

標籤: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

  • 使用make()函數來建立切片

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)
}

  • Range關鍵字

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語言數組,切片

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.