PHP轉Go系列:map映射


映射的定義

初識映射會很懵,因為在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映射方面的區別於聯系,如果感興趣可以自行了解嘗試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM