go內建了map型別,map是乙個無序鍵值對集合(也有一些書籍翻譯為字典)。
普通建立:
// 宣告乙個map型別,內的型別指任意可以進行比較的型別 int指值型別
m :=
map[
string
]int
fmt.
print
(m["a"
])
make方式建立map:
type person struct
func
main()
p,isfind := m[
"123"
] fmt.
println
(isfind)
//true
fmt.
println
(p)//
}
注意:golang中map的 key 通常 key 為 int 、string,但也可以是其他型別如:bool、數字、string、指標、channel,還可以是只包含前面幾個型別的介面、結構體、陣列。slice、map、function由於不能使用 == 來判斷,不能作為map的key。
通過key操作元素:
var numbers map
[string
]int
numbers =
make
(map
[string
]int
)numbers[
"one"]=
1//賦值
numbers[
"ten"]=
10//賦值
numbers[
"three"]=
3delete
(numbers,
"ten"
)// 刪除key為 ten 的元素
fmt.
println
("第三個數字是: "
, numbers[
"three"])
// 讀取資料
map的遍歷:同陣列一樣,使用for-range 的結構遍歷
注意:
演示併發讀寫map的問題:
package main
func
main()
}()go
func()
}()for
//無限迴圈,讓併發程式在後台執行
}
go內建的map只有讀是執行緒安全的,讀寫是執行緒不安全的。
需要併發讀寫時,一般都是加鎖,但是這樣做效能不高,在go1.9版本中提供了更高效併發安全的sync.map。
sync.map的特點:
package main
import
("fmt"
"sync"
)func
main()
)bool
)}
注意:map沒有提供獲取map數量的方法,可以在遍歷時手動計算。sync.map為了併發安全。損失了一定的效能。 python 基礎學習 09 集合
集合表現形式set 集合和列表非常相似 不同點 集合只能儲存不可變物件 s print s,type s typeerror unhashable type list 集合中儲存的物件是無序的 而列表是有序的 集合不能出現重複元素 s print s,type s class set 使用 來建立集...
Python基礎學習09 集合
1 使用花括號 s print s print type s 集合中重複的元素會被去除掉 s print s 不能使用 表示空集合,因為 表示空字典 s print type s 2 呼叫內建函式set 類set的構造方法 print set range 1,6 print set 3,5,9,2 ...
5 0 引用型別
ecmascript中有5中簡單資料型別 也叫基本資料型別 undefined boolean null number string。還有一種複雜資料型別 object object本質上是一組無序的明值対組成的 1 應用型別的值 物件 是引用型別的乙個例項。2 在es種,引用型別是一種資料結構,用...