go語言之map集合 字串 指標

2022-10-09 06:39:12 字數 3922 閱讀 8439

一、map(集合)

1.定義:

map 是一種無序的鍵值對的集合。通過 key 來快速檢索資料,key 類似於索引,指向資料的值。我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為                   map 是使用 hash 表來實現的。

2.map的建立

語法:

//

宣告變數,預設 map 是 nil

varmap1 map[key_data_type]value_data_type

//使用 make 函式

map2 := make(map[key_data_type]value_data_type)

例子:

//

通過宣告變數

package main

import

"fmt

"func main()

}

3、元素操作

新增:方法與陣列的一樣

package main

import

"fmt

"func main()else

//插入值

a[1]="cc"

a[2]="bb"

//取乙個不存在的key值會返回value值的值  

//無

//建立乙個新的map,判斷值是否存在用ok

var b map[int]int=make(map[int]int

) b[

1]=100

fmt.println(b)

//map[1:100]

fmt.println(b[9]) //

0if v,ok:=a[9

];ok

else

v,ok:=a[1

] fmt.println(v)

//cc

fmt.println(ok) //

ture

//定義和初始化的第二種方式

//var a =map[int]string

////a[1]

}

刪除:語法是 [delete(map, key)]。這個函式沒有返回值。

package main

import (

"fmt")

func main()

//給map新增元素

personsalary["

mike

"] = 9000

fmt.println(

"map before delete

", personsalary) //

map before delete map[jamie:15000 mike:9000 steve:12000]

delete(personsalary, "

steve")

fmt.println(

"map after delete

", personsalary) //

map after delete map[jamie:15000 mike:9000]

}

4、獲取map的長度:len(map名),長度為k:v鍵值對的個數

5、map同樣也是引用資料型別

和 [slices]切片類似,map 也是引用型別。當 map 被賦值為乙個新變數的時候,它們指向同乙個內部資料結構。因此,改變其中乙個變數,就會影響到另一變數。

package main

import

"fmt

"func main()

test1(a)

fmt.println(a)

//上面執行了函式test1(),資料已經被修改,map[1:888 2:100]

}func test1(a map[

int]string

)

6、map的相等性

map 之間不能使用==操作符判斷,==只能用來檢查 map 是否為nil

package main

func main()

//map2 := map1

//if map1 == map2

//map迴圈出所有元素

//var a =map[int]string

////for i:=0;i

<=len(a);i++

////map是無序的

//for k,v:=range a

}

二、字串

1.定義

go 語言中的字串是乙個位元組切片。go 中的字串是相容 unicode 編碼的,並且使用 utf-8 進行編碼。go中的string字串的形式都是以utf-8的形式存入記憶體中,而其他語言以unicode萬國碼形式。

字串是不可變的,go 中的字串是不可變的。一旦乙個字串被建立,那麼它將無法被修改。字元只能讀取,不支援修改。

2、編碼方式介紹

package main

import (

"fmt""

unicode/utf8")

func main()

//for _,v:=range name

//name := "name李"

//name[0]=99

byteslice := byte//

列印的是位元組數

str := string

(byteslice)

a:=len(str)

b:=utf8.runecountinstring(str)

fmt.println(b) //4

fmt.println(a) //

5 fmt.println(str) //

café

}

三、指標

1.定義

指標是一種儲存變數記憶體位址(memory address)的變數。

2.型別宣告

指標變數的型別為 *t,該指標指向乙個 t 型別的變數。 //

&取位址符號 //

* 放在型別旁邊,表示指向這個型別的指標 //

* 放在變數旁邊,取出指標指向的具體值。表示解引用(反解)

3、演示

import "

fmt"

func main()

4、指標的零值:零值是nil

package main

import

"fmt

"func main()

5、向函式傳遞指標引數

package main

import

"fmt

"func change(val *int

) func main()

注意:不要向函式傳遞陣列的指標,而應該使用切片。假如我們想要在函式內修改乙個陣列,並希望呼叫函式的地方也能得到修改後的陣列,一種解決方案是把乙個指向陣列的指標傳遞給這個函式。

package main

import

"fmt

"func main()

func test9(a *[4]int

) func test10(a

int)

go不支援指標運算

//

下面這種是不允許的

package main

func main()

p := &b

p++}

go語言之 map集合

map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的 下面看具體例項 pac...

C語言之字串與指標

1 字串的儲存與訪問 字串的訪問 char str n 第i個字元 str i 思考?以下寫法是否正確?char s1 n s1 welcome s1 welcome 錯誤!必須逐一賦值或使用函式,且陣列長度要足夠大。可以使用字元指標解決 char s s welcome 或 char s welc...

Go語言之指標

每個變數在執行時都擁有乙個位址,這個位址代表變數在記憶體中的位置。go語言中使用 字元放在變數前面對變數進行 取位址 操作,這一點與c c 是一樣的。go語言中的值型別 int float bool string array struct 都有對應的指標型別,如 int int64 string等。...