go 遍历二维数组json_for-range造就循环永动机?快来看看go中for-range的那些事!
来自公众号: 新世界杂货铺
循环永动机
Q1: 如果我们在遍历数组的同时修改数组元素,能否得到一个永远都不会停止的循环呢?
func main() {arr := []int{1, 2, 3}for _, v := range arr {arr = append(arr, v)}fmt.Println(arr)
}
// 输出: 1 2 3 1 2 3
上述代码的输出意味着循环只遍历了原始切片中的三个元素,我们遍历切片时追加的元素不会增加循环的执行次数, 所以循环最终还是停了下来
答: 对于所有的range循环, Go语言会在编译期间将原切片
或者数组
赋值给一个新的变量ha
, 在赋值的过程中就发生了拷贝, 所以我们遍历的切片已经不是原始的切片变量了
神奇的指针
Q2: 我们遍历一个数组时,如果获取range
返回变量的地址并保存到另一个数组或哈希时, 就会遇到令人困惑的现象
func main() {arr := []int{1, 2, 3}newArr := []*int{}for _, v := range arr {newArr = append(newArr, &v)}for _, v := range newArr {fmt.Println(*v)}
}
// 输出: 3 3 3
答: 遇到这种同时遍历索引和元素的range循环时, go语言会额外创建一个新的v2
变量存储切片中的元素, 循环中使用的这个变量v2会在每一次迭代被重新赋值而覆盖, 在赋值时也发生了拷贝
. 因为在循环中返回的变量的地址都完全相同, 所以才会出现神奇的指针的现象
map的随机遍历
Q3: go语言中使用range遍历哈希表时, 往往都会得到不同的结果?
答: 但这并不是说明哈希表不稳定, 这是go语言故意这样设计的, 他在运行时为哈希表遍历引入不确定性, 也是告诉所有使用go语言的使用者, 程序不要依赖于哈希表的稳定遍历。
参考
https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-for-range/
go 遍历二维数组json_for-range造就循环永动机?快来看看go中for-range的那些事!相关推荐
- python中遍历二维数组_python遍历二维数组-女性时尚流行美容健康娱乐mv-ida网
女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 二 维 数组 5.2.1 二 ...
- 二维数组更改vue_使用vue中的v-for遍历二维数组的方法
如下所示: {{itemss}} 其中,data数据为: this.data = [ [ { type: '', name: '资产', start: '期末余额', end: '期初余额' }, { ...
- C++知识点杂记1——typedef、static_cast、const_cast、遍历二维数组、聚合类
1.typedef typedef一般是对某种类型的类型别名(不是变量别名) typedef double db;void mixtypename() {db d=1.2;cout<<d& ...
- 动态二维数组赋值及for循环遍历和toString遍历
package com.Summer_0421.cn;import java.util.Arrays;/*** @author Summer* 动态二维数组赋值及for循环遍历和toString遍历* ...
- 遍历二维数组_Java编程基础阶段笔记 day06 二维数组
二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 ...
- 微信小程序遍历二维数组
在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: {familys:[{familyName:'贾家', users: [{name:'贾宝玉'},{name:'贾元春' ...
- 如何创建二维数组 微信小程序_微信小程序遍历二维数组
在微信小程序中遍历二维数组,代码如下 data 中二维数组结构如下 data: { familys:[ { familyName:'贾家', users: [ {name:'贾宝玉'}, {name: ...
- c语言二维数组行优先如何访问快,C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why?...
C/C++遍历二维数组,列优先(column-major)比行优先(row-major)慢,why? 简单粗暴的答案:存在Cache机制! 稍微啰嗦一点:CPU访问内存(读/写,遍历数组的话主要是读) ...
- python遍历二维数组
最近正好需要读取nc数据,对数据进行插值.首先需要遍历二维数据,复习一下二维数组遍历的操作,操作时要注意数组每行的长度是否是一致的. 具体实例如下所示: # 要读取的nc数据是二维数组 EVEL_0h ...
- 漫画:如何螺旋遍历二维数组?
作者 | 小灰 来源 | 程序员小灰(ID:chengxuyuanxiaohui) 第二天 什么意思呢?我们来举个例子,给定下面这样一个二维数组: 我们需要从左上角的元素1开始,按照顺时针进行螺 ...
最新文章
- mysql not null 性能_如何使用NULL提高MySQL查询的性能?
- java zip打包与乱码的解决
- MySQL 的 binlog 编号竟然可以这么大!
- OpenCV图像处理——对比两张图像差异的位置并标记
- C语言unit test单元测试类的实现(附完整源码)
- UnpooledHeadByteBuf源码分析
- 计算机应用基础分析与报告,y计算机应用基础出题分析报告.doc
- Linux 内核总线
- OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
- es6 Map,Set 和 WeakMap,WeakSet
- 【工具使用】Keil5软件使用-基础使用篇
- zmap扫描mysql_zmap使用笔记
- java weka 分类_Weka开发[48]——用Weka文本分类
- 高德地图 经纬度查询位置
- C语言入门-绝对值(abs)
- 使用Xbox360手柄控制你的turtlebot/rbx1/mrobot小车机器人
- android studio 导入一个已有的android studio project作为lib使
- 那些年的成长,爱情的总结
- 2023年长安大学油气田地质与开发考研上岸前辈备考经验
- Maven学习——maven基础
热门文章
- idea右边maven全爆红_通过Idea创建Spring Boot java项目
- python des加密文件_python DES3 加密解密
- protected的继承方式有什么特点_草莓的授粉方式有哪些?各有什么特点
- leaflet调用mysql_PHP和MySQL以及Leaflet API
- DLL的Export和Import及extern
- Halcon PDF文档(hdevelop_users_guide)学习总结之二——创建新算子
- 开发者应该关注的五项Web新兴技术:WebGL和SVG名列其中
- 《机器学习实战》KNN算法实现
- 让sublime编译php、js
- java设计模式之装饰者模式