GoLang学習ノート(25)mapの宣言、付与、遍歴、キー値ペアの削除
4344 ワード
mapはGo言語の内蔵タイプで、1つの値を1つのキーに関連付け、対応する検索を使用することができます.地図、マッピング、または辞書(python)に翻訳され、より多くの翻訳は集合(java)mapとして無秩序なキー値対(key-value pair)の集合であり、mapはkeyによってデータを迅速に取得し、keyはインデックスに類似し、郷音のvalue値を指す.mapは配列を遍歴してスライスと同じように遍歴できる集合であるが,mapは無秩序であるため,mapが示す順序を決定することはできない.これはmapがhashテーブルを用いて実現されるためである.mapは無秩序で、印刷されるたびにmapが異なり、indexで取得することはできません.keyで取得する必要があります.mapの長さは固定されず、sliceスライスと同様に拡張でき、内蔵len()関数はmapに同様に適用され、mapが持つキー値ペアの数を返すが、mapはcap()関数で容量を計算できない、あるいはcap()関数のパラメータはmapではない.同じmapではkeyが一意性を保証する必要があります.keyのデータ型は比較演算に参加できるタイプ、すなわち=または!=ブール、整数、浮動小数点、文字列、配列などの操作のタイプ.スライス、関数、mapなどの参照タイプではだめです.mapのvalueは任意のデータ型であってもよい.sliceと同様にmapも参照タイプです.
var mapキーワードを使用してmapを宣言する フォーマット:var変数名map[keyタイプ]valueタイプ varは変数を宣言し、デフォルトmapはnilであり、nil mapはキー値ペアを格納するために使用できません. var宣言後、宣言時に初期化するか、make()関数を使用してメモリ領域に割り当てるかで、キー値ペアを格納できます.
make関数を使用してmapフォーマットを宣言します.変数名:=make(map[keyタイプ]valueタイプ)この宣言方式は、mapを初期化しない場合、mapもnilに等しくありません.
Mapを宣言した後、直接値を割り当てます.
Mapを宣言した後、mapに値を割り当てます.
mapを巡る.
mapのvalueを巡る
mapのkeyを巡る
エレメントがコレクションに存在するかどうかを確認します.map[key]キーが存在しない場合、stringタイプでは空の文字列、intタイプでは0などのvalue値タイプのデフォルト値が得られますが、プログラムはエラーを報告しません.したがってvalue,ok:=map[key]によりkey/valueが存在するか否かを取得することができ,okはbool型であり,trueであればそのキー値ペアが存在する.
delete(map,key)関数は、mapと対応するkeyのパラメータを持つ集合の要素を削除するために使用されます.
関数を削除しても値は返されません.
Go言語はmapにすべての要素をクリアする関数を提供していません.mapを空にする唯一の方法は、mapを新規作成し、ターゲットmapに割り当てることです.
var mapキーワードを使用してmapを宣言する フォーマット:var変数名map[keyタイプ]valueタイプ varは変数を宣言し、デフォルトmapはnilであり、nil mapはキー値ペアを格納するために使用できません. var宣言後、宣言時に初期化するか、make()関数を使用してメモリ領域に割り当てるかで、キー値ペアを格納できます.
func testVar() {
var map1 map[string]string
fmt.Printf("%T,%v,len()=%d,nil?%v", map1, map1, len(map1), map1 == nil)
//map[string]string,map[],len()=0,nil?true
}
make関数を使用してmapフォーマットを宣言します.変数名:=make(map[keyタイプ]valueタイプ)この宣言方式は、mapを初期化しない場合、mapもnilに等しくありません.
func testMake() {
map2 := make(map[string]string)
fmt.Printf("%T,%v,len()=%d,nil?%v", map2, map2, len(map2), map2 == nil)
//map[string]string,map[],len()=0,nil?false
}
Mapを宣言した後、直接値を割り当てます.
func testMap1() {
// , ,
var m1 = map[string]string{
"HuBei": "WuHan",
"HuNan": "ChangSha",
"JiangSu": "NanJing",
"ZheJiang": "NingBo",
}
// , “,” , “,”
m2 := map[string]string{"HuBei": "WuHan", "HuNan": "ChangSha", "JiangSu": "NanJing", "ZheJiang": "NingBo"}
fmt.Printf("%T,%v,len()=%d,nil?%v
", m1, m1, len(m1), m1 == nil)
fmt.Printf("%T,%v,len()=%d,nil?%v
", m2, m2, len(m2), m2 == nil)
}
Mapを宣言した後、mapに値を割り当てます.
func testMap2() {
m1 := make(map[string]string)
m1["HuBei"] = "WuHan"
m1["HuNan"] = "ChangSha"
m1["JiangSu"] = "NanJing"
m1["ZheJiang"] = "NingBo"
fmt.Printf("%T,%v,len()=%d,nil?%v
", m1, m1, len(m1), m1 == nil)
}
mapを巡る.
var m0 = map[string]string{"HuBei": "WuHan", "HuNan": "ChangSha", "JiangSu": "NanJing", "ZheJiang": "NingBo"}
// key value
func testRangeMap1() {
for k,v := range m0{
fmt.Println(" :",k,", :",v)
}
}
mapのvalueを巡る
func testRangeMap2() {
for _,v := range m0{
fmt.Println(" :",v)
}
}
mapのkeyを巡る
func testRangeMap3() {
for k := range m0{
fmt.Println(" :",k)
}
}
エレメントがコレクションに存在するかどうかを確認します.map[key]キーが存在しない場合、stringタイプでは空の文字列、intタイプでは0などのvalue値タイプのデフォルト値が得られますが、プログラムはエラーを報告しません.したがってvalue,ok:=map[key]によりkey/valueが存在するか否かを取得することができ,okはbool型であり,trueであればそのキー値ペアが存在する.
func findMapKey1() {
val1,ok1 := m0["HuBei"]
fmt.Println(val1,ok1)
val2,ok2 := m0["HeiLongJiang"]
fmt.Println(val2,ok2)
}
func findMapKey2(str string,m map[string]string) {
val,ok := m[str]
if ok {
fmt.Println(" ",str," :",val)
} else {
fmt.Println(" ")
}
}
//findMapKey2
func findMapKey3(str string,m map[string]string) {
if val,ok := m[str];ok {
fmt.Println(" ",str," :",val)
} else {
fmt.Println(" ")
}
}
delete(map,key)関数は、mapと対応するkeyのパラメータを持つ集合の要素を削除するために使用されます.
関数を削除しても値は返されません.
func deleteMap1() {
fmt.Printf(" :%T,%v,len()=%d,nil?%v
", m0, m0, len(m0), m0 == nil)
if _,ok := m0["HuNan"];ok{
delete(m0,"HuNan")
}
fmt.Printf(" :%T,%v,len()=%d,nil?%v
", m0, m0, len(m0), m0 == nil)
}
Go言語はmapにすべての要素をクリアする関数を提供していません.mapを空にする唯一の方法は、mapを新規作成し、ターゲットmapに割り当てることです.
func deleteMap2() {
fmt.Printf(" :%T,%v,len()=%d,nil?%v
", m0, m0, len(m0), m0 == nil)
m0 = map[string]string{}
fmt.Printf(" :%T,%v,len()=%d,nil?%v
", m0, m0, len(m0), m0 == nil)
}