如何使用C++11基于范围的for循环处理QJsonArray
用C++11基于范围的for循环处理QJsonArray的实现方法
没问题,我来帮你把这段旧风格的索引循环改成C++11的基于范围的for循环,写法会更简洁直观,逻辑和你原来的完全一致:
先回顾下你的需求:遍历存有带bar字段对象的QJsonArray,给每个对象新增foo字段(值和bar字段内容相同),最后把处理后的对象存入新数组。
用C++11范围for循环的实现代码如下:
// QJsonArray oldArray包含带有"bar"元素的对象数组 QJsonArray newArray; for (const QJsonValue& value : oldArray) { QJsonObject element = value.toObject(); element["foo"] = element["bar"]; newArray.append(element); }
这里有几个关键点可以说明下:
- 范围for循环会自动遍历
oldArray中的每一个QJsonValue元素,不需要手动维护索引和计数,代码更简洁不易出错 - 使用
const QJsonValue&是为了避免对原数组元素的不必要拷贝,我们只是读取原元素,之后会复制出一个新的QJsonObject来修改 - 后续的字段添加和数组追加逻辑和你原来的旧循环完全一致,保证功能不变
如果你追求更紧凑的写法,也可以把对象的创建和修改合并,但上面的写法已经足够清晰易读,是日常开发里的首选方式。
内容的提问来源于stack exchange,提问作者Paul Masri-Stone
相关产品推荐
相关产品推荐

