Go 字典 字串

2021-10-12 09:59:54 字數 4034 閱讀 4318

map是一種較為特殊的資料結構,在任何一種程式語言中都可以看見他的身影,它是一種鍵值對結構,通過給定的key可以快速獲得對應的value。

4.1.1 如何定義字典

var m1 map

[string

]int

m2 :=

make

(map

[int

]inte***ce

,100

)m3 :=

map[

string

]string

在定義字典時不需要為其指定容量,因為map是可以動態增長的,但是在可以預知map容量的情況下為了提高程式的效率也最好提前標明程式的容量。需要注意的是,不能使用不能比較的元素作為字典的key,例如陣列,切片等。而value可以是任意型別的,如果使用inte***ce{}作為value型別,那麼就可以接受各種型別的值,只不過在具體使用的時候需要使用型別斷言來判斷型別。

4.1.2 字典操作

向字典中放入元素也非常簡單

m3[

"key1"]=

"v1"

m3["key2"]=

"v2"

m3["key3"]=

"v3"

你可以動手試一下,如果插入的兩個元素key相同會發生什麼?

與陣列和切片一樣,我們可以使用len來獲取字典的長度。

len

(m3)

在有些情況下,我們不能確定鍵值對是否存在,或者當前value儲存的是否就是空值,go語言中我們可以通過下面這種方式很簡便的進行判斷。

if value, ok := m3[

"name"

]; ok

上面這段**的作用就是如果當前字典中存在key為name的字串則取出對應的value,並返回true,否則返回false。

對於乙個已經存在的字典,我們如何對其進行遍歷呢?可以使用下面這種方式:

for key, value :=

range m3

如果已經存在與字典中的值已經沒有作用了,我們想將其刪除怎麼辦呢?可以使用go的內建函式delete來實現。

delete

(m3,

"key1"

)

除了上面的一些簡單操作,我們還可以宣告值型別為切片的字典以及字典型別的切片等等,你可以動手試試看。

不僅如此我們還可以將函式作為值型別存入到字典中。

func

main()

m["multi"]=

func

(a, b int

)int

fmt.

println

(m["add"](

3,2)

) fmt.

println

(m["multi"](

3,2)

)}

字串應該可以說是所有程式語言中最為常用的一種資料型別,接下來我們就一起探索下go語言中對於字串的常用操作方式。

4.2.1 字串定義

字串是一種值型別,在建立字串之後其值是不可變的,也就是說下面這樣操作是不允許的。

s :=

"hello"s[0

]='t'

編譯器會提示cannot assign to s[0]。在c語言中字串是通過\0來標識字串的結束,而go語言中是通過長度來標識字串是否結束的。

如果我們想要修改乙個字串的內容,我們可以將其轉換為位元組切片,再將其轉換為字串,但是也同樣需要重新分配記憶體。

func

main()

與其他資料型別一樣也可以通過len函式來獲取字串長度。

len

(s)

但是如果字串中包含中文就不能直接使用byte切片對其進行操作,go語言中我們可以通過這種方式

func

main()

//helloä½ å¥½ä¸­å›½

fmt.

println()

r :=

rune

(s)for i :=

0; i <

len(r)

; i++

//hello你好中國

}

在go語言中字串都是以utf-8的編碼格式進行儲存的,所以每個中文佔三個位元組加上hello的5個位元組所以長度為17,如果我們通過utf8.runecountinstring函式獲得的包含中文的字串長度則與我們的直覺相符合。而且由於中文對於每個單獨的位元組來說是不可列印的,所以可以看到很多奇怪的輸出,但是將字串轉為rune切片則沒有問題。

4.2.2 strings包

strings包提供了許多操作字串的函式。在這裡你可以看到都包含哪些函式

下面演示幾個例子:

func

main()

4.2.3 strconv包

strconv包實現了基本資料型別與字串之間的轉換。在這裡你可以看到都包含哪些函式

下面演示幾個例子:

i, err := strconv.

atoi

("-42"

)//將字串轉為int型別

s := strconv.

itoa(-

42)//將int型別轉為字串

若轉換失敗則返回對應的error值。

4.2.4 字串拼接

除了以上的操作外,字串拼接也是很常用的一種操作,在go語言中有多種方式可以實現字串的拼接,但是每個方式的效率並不相同,下面就對這幾種方法進行對比。(關於測試的內容會放在後面的章節進行講解,這裡大家只要知道這些拼接方式即可)

1.sprintf

const numbers =

100func

benchmarksprintf

(b *testing.b)

} b.

stoptimer()

}

2.+拼接

func

benchmarkstringadd

(b *testing.b)

} b.

stoptimer()

}

3.bytes.buffer

func

benchmarkbytesbuf

(b *testing.b)

_= buf.

string()

} b.

stoptimer()

}

4.strings.builder拼接

func

benchmarkstringbuilder

(b *testing.b)

_= builder.

string()

} b.

stoptimer()

}

5.對比

benchmarksprintf-

868277

18431 ns/op

benchmarkstringbuilder-

81302448

922 ns/op

benchmarkbytesbuf-

8884354

1264 ns/op

benchmarkstringadd-

8208486

5703 ns/op

可以看到通過strings.builder拼接字串是最高效的。

字典,字串

1 在python中 不可變資料型別 整型,字串,元祖 可變資料型別 列表,字典 2 字典的特徵 無序 在字典中順序儲存的取出來卻不一定是順序的 鍵值不可變且唯一 3 建立字典 列表建立方式 a list 1,2,3 b list 1,2,3 print a print b 字典建立方式 c dic...

字串,字典

字串常見操作 去除左右兩邊空格 語法 string.strip 去除兩邊空格 string.lstrip 去除左邊空格 string.rstrip 去除右邊空格 字串分割 語法 string.split 按照空格字元分割,返回乙個列表 string.split 分隔符 按照指定分割符分割,返回乙個表...

字典 字串

4.字典 字串 4.1 字典 map是一種較為特殊的資料結構,在任何一種程式語言中都可以看見他的身影,它是一種鍵值對結構,通過給定的key可以快速獲得對應的value。4.1.1 如何定義字典 var m1 map string int m2 make map int inte ce 100 m3 ...