映射的定义

初识映射会很懵,因为在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映射方面的区别于联系,如果感兴趣可以自行了解尝试。

最新文章

  1. sublime 安装插件GitGutter报错,git binary cannot be found等等
  2. Alpha阶段项目总结
  3. 使用腾讯开发平台获取QQ用户数据资料
  4. maven settings.xml 阿里云
  5. bpl 包的编写和引用
  6. 仿Material UI框架的动画特效
  7. Java插件开发-取插件下的某个文件
  8. HDU 5047 推公式+别样输出
  9. Linux瑞士军刀:密码管理Keeweb
  10. 处理日期时间NSDate
  11. 解决poi导出Excel异常org.openxmlformats.schemas.spreadshe
  12. 201521123040《Java程序设计》第8周学习总结
  13. Spring框架学习笔记——各种异常、报错解决
  14. 变量类型、sprintf、不同类型之间的混合运算
  15. 「CodeChef Dec13 REALSET」 Petya and Sequence 循环卷积
  16. 第一章:OEL6.8之虚拟机安装
  17. call_user_func 和 call_user_func_array用法
  18. (ecj)Eclipse的Java编译器分析之一——ecj介绍
  19. python 内置函数format
  20. MVC基于角色权限控制--数据库设计

热门文章

  1. SQLServer配置镜像,无法将 ALTER DATABASE 命令发送到远程服务器实例,数据库镜像配置未更改。请确保该服务器已连接,然后重试。
  2. Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记
  3. 移动端H5页面开发,碰到一个字体变大的BUG
  4. Redis面试篇 -- Redis常见性能问题和解决方案?
  5. ASP.NET MVC快速开发框架FastExecutor开发全过程感受及总结
  6. 一个神奇的HTML标签-----marquee
  7. Dynamics 365中的分派(Assign)。
  8. Solr实现全文搜索
  9. log file sync等待超高案例浅析
  10. s3c2440裸机-异常中断(一. 异常、中断的原理与流程)