PHP轉Go系列:map映射

映射的定義

初識映射會很懵,由於在PHP中沒有映射類型的定義。其實沒那麼複雜,任何複雜的類型在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中也有相似的初始化方法,但切記統一鍵與值的數據類型。code

array := map[string]string{
    "name": "平也",
    "sex":  "1",
    "age":  "10",
}

映射的遍歷

在PHP中其實就是遍歷數組的操做,foreach便可。string

$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關鍵字。class

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警告。foreach

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映射方面的區別於聯繫,若是感興趣能夠自行了解嘗試。

相關文章
相關標籤/搜索