對映的定義
初識對映會很懵,因為在PHP中沒有對映型別的定義。其實沒那麼複雜,任何複雜的型別在PHP中都可以用陣列表示,對映也不例外。
$array['name'] = '平也';
$array['sex'] = '1';
$array['age'] = '10';
//output
Array
(
[name] => 平也
[sex] => 1
[age] => 10
)
對映其實就是有key有value的陣列,在Go中的賦值也很類似,但需要提前宣告該對映型別的鍵與值的型別,確保所有的鍵和值的賦值型別統一,否則會報錯。
array := make(map[string]string)
array["name"] = "平也"
array["sex"] = "1"
array["age"] = "10"
fmt.Print(array) //output map[age:10 name:平也 sex:1]
在PHP中還有一種初始化陣列的方法,就是將所有要儲存的鍵與值賦值給變數。
$array = [
'name' => '平也',
'sex' => '1',
'age' => '10'
];
在Go中也有類似的初始化方法,但切記統一鍵與值的資料型別。
array := map[string]string{
"name": "平也",
"sex": "1",
"age": "10",
}
對映的遍歷
在PHP中其實就是遍歷陣列的操作,foreach即可。
$array = [
'name' => '平也',
'sex' => '1',
'age' => '10'
];
foreach ($array as $key => $value) {
print_r($array);
}
//output
Array
(
[name] => 平也
[sex] => 1
[age] => 10
)
Array
(
[name] => 平也
[sex] => 1
[age] => 10
)
Array
(
[name] => 平也
[sex] => 1
[age] => 10
)
在Go中也可以像遍歷陣列那樣遍歷map,依然使用range關鍵字。
array := map[string]string{
"name": "平也",
"sex": "1",
"age": "10",
}
for v, k := range array {
fmt.Print(k, v)
}
上篇文章講到遍歷時可以通過下劃線來忽略鍵或值,如果只遍歷鍵,下劃線也可以省略。
array := map[string]string{
"name": "平也",
"sex": "1",
"age": "10",
}
for k := range array {
fmt.Print(k)
}
//output sexagename
對映的取值
PHP中可以直接通過讀陣列的key來取值。
$array = ['name' => 'pingye'];
echo $array['name']; //output pingye
在Go中的操作是一樣的,與PHP不同的是,如果取了不存在的key,Go中預設輸出空值,在PHP中就會產生warning警告。
array := map[string]string{
"name": "pingye",
"sex": "1",
"age": "10",
}
fmt.Print(array["name"]) //pingye
對映元素的刪除
在PHP中的unset可以刪除任何你想刪除的陣列元素,非常好用。
$array = [
'name' => '平也',
'sex' => '1',
'age' => '10'
];
unset($array['name']);
print_r($array);
//output
Array
(
[sex] => 1
[age] => 10
)
在Go中通過delete函式來刪除map中的元素。
array := map[string]string{
"name": "pingye",
"sex": "1",
"age": "10",
}
delete(array, "name")
fmt.Print(array) //output map[age:10 sex:1]
清空map元素
在PHP中好像從來沒有注意過是否把陣列清空,很抱歉,我能想到的清空陣列方法就是把空陣列賦值給它。
$array = [
'name' => '平也',
'sex' => '1',
'age' => '10'
];
$array = [];
print_r($array);
//output
Array
(
)
然而,在Go中也沒有提供清空map的函式,重新make一個map就行了,原來的map會被Go的垃圾回收機制清除掉,甚至比寫一個清空的函式效率還高。以上是PHP與Go在map對映方面的區別於聯絡,如果感興趣可以自行了解嘗試。