陣列,切片和字典

2021-09-08 14:15:17 字數 4169 閱讀 6423

1、陣列(array)

陣列是乙個有相同資料型別的元素組成的固定長度的有序集合,如:var x [5]int,使用var定義的陣列,預設值如果整型為0,浮點型為0.0,字串為"",物件為nil。

求整型陣列之和,使用range函式,遍歷陣列、切片、字典時,返回索引和元素值;當對某個返回值不感興趣時,要用下劃線(_)來代替

package main

import

"fmt

"func main()

fmt.println(sum

)}

定義陣列其他方式:1)、var x = [5]int

2)、var x =[5]int{}

x[0]=1

3)、var x = [...]string                        }

2、切片(slice)

切片類似陣列,切片長度是可變的;切片是有容量(capacity)和長度(length)兩個屬性的;切片變數使用時,索引不能大於等於切片長度,否則報錯out of range

1)、make函式定義切片

package main

import

"fmt

"func main()

fmt.println(x)

for i := 0; i < len(y); i++

fmt.println(y)

}

輸出如圖:

2)、通過陣列切片賦值,採用[low_index:high_index]方式擷取陣列來獲取數值切片,其中獲取包括low_index,不包括high_index,high_index不能大於陣列長度

使用案例如下

package main

import

"fmt

"func main()

var s1 = arr1[2:3

] var s2 = arr1[:3

] var s3 = arr1[2

:] var s4 =arr1[:]

fmt.println(s1)

fmt.println(s2)

fmt.println(s3)

fmt.println(s4)

}

執行結果如下

}執行結果如圖,可知切片擴容演算法是原來容量大小的兩倍;在測試**中發現,如果追加元素超過兩倍容量,後面擴容演算法就不會是倍數擴容了

4)、copy函式,複製切片中元素

package main

import

"fmt

"func main()

slice2 := make(int, 5, 10

) copy(slice2, slice1)

fmt.println(slice1)

fmt.println(slice2)

}

執行結果如下,slice2長度為5,所以只拷貝了slice1的前五個元素

5)、小總結一下,使用 := 方式定義切片,和陣列區別僅僅是方括號中是否有數字或 ...

示例如下,輸出結果都是:[1 2 3 4]

package main

import

"fmt

"func main()

fmt.println(arr1)

arr2 := [...]int

fmt.println(arr2)

arr3 := int

fmt.println(arr3)

}

3、字典(map)

字典是一組無序的,鍵值對的集合,字典也叫關聯陣列,陣列通過索引取數,字典通過鍵來取數

1)、初始化資料方式定義字典

package main

import

"fmt

"func main()

for key, val :=range x

}

執行結果

2)、make函式定義map,如果只定義,不初始化,使用會報錯

package main

import

"fmt

"func main()

}

3)、使用 := 定義並初始化map

package main

import

"fmt

"func main()

}

4)、獲取字典中不存在的key值,如果是整數則返回0,字串返回 "";這樣的返回值,如果map中就是有值為0或空字串,就無法區分了

使用 := 可以獲取map中元素值和是否存在的布林型別,如下

package main

import

"fmt

"func main()

執行結果

在實際使用中,可以如下判斷是否含有key值

package main

import

"fmt

"func main()

else

}

輸出如下

5)、map中使用delete函式刪除元素,如果不存在,刪除也不會報錯,不會有任何其他影響

package main

import

"fmt

"func main()

執行結果

6)、map複雜案例一:

package main

import

"fmt

"func main() 回車換行

facebook["

2018001

"] = map[string]int

facebook[

"2018002

"] = map[string]int

facebook[

"2018003

"] = map[string]int

for stu_no, stu_info :=range facebook

fmt.println()}}

輸出結果

map複雜案例二(執行結果和上面一樣)

package main

import

"fmt

"func main() ,

"2018002

": ,

"2018003

": ,

}for stu_no, stu_info :=range facebook

fmt.println()}}

陣列 切片 字典 函式

目錄 1 陣列 切片 2 字典 3 函式 陣列和切片的區別就是乙個是固定長度乙個不固定。定長陣列 不定長陣列 names string字典和python的字典一樣的,也是key value。儲存的key是經過雜湊運算的。2.1 宣告方式 注意點1!使用字典一定要先分配空間 注意點2!在map中不存在...

golang 陣列和切片

陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...

Go 陣列和切片

陣列擷取 a 開始索引位置,結束索引 切片 slice 是本身並非動態陣列和陣列指標,通過內部指標指向底層陣列。建立乙個length和capacity都等於5的slice slice make int,5 length 3,capacity 5的slice slice make int,3,5 建立...