ZBLOG

for (auto iter = locationPointMap.begin(); iter != locationPointMap.end();iter++) { std::shared_ptr obj = iter->second; if (locationIndex == 1){ if (!isNewVersion){ if (obj->location != 1) { break; } }else{ if (...

为了优化这段代码,我们可以将判断逻辑提取到一个函数中,从而减少重复的代码并提高可读性。下面是优化后的代码示例:

  1. // 检查位置是否有效的函数
  2. bool IsLocationValid(int locationIndex, bool isNewVersion, int location) {
  3. if (!isNewVersion) {
  4. switch (locationIndex) {
  5. case 1: return (location == 1);
  6. case 2: return (location == 2 || location == 4 || location == 5);
  7. case 3: return (location == 3 || location == 6);
  8. default: return false; // 默认情况下返回 false
  9. }
  10. } else {
  11. switch (locationIndex) {
  12. case 1: return (location == 1 || location == 4);
  13. case 2: return (location == 2 || location == 5 || location == 6);
  14. case 3: return (location == 3 || location == 7 || location == 8);
  15. default: return false; // 默认情况下返回 false
  16. }
  17. }
  18. }
  19. // 遍历位置点地图
  20. for (auto iter = locationPointMap.begin(); iter != locationPointMap.end(); ++iter) {
  21. std::shared_ptr<LocationPoint> obj = iter->second;
  22. if (!IsLocationValid(locationIndex, isNewVersion, obj->location)) {
  23. continue; // 条件不满足时跳过当前循环
  24. }
  25. obs_location_t location;
  26. location.location = obj->location;
  27. bool exist_person = false;
  28. // 在这里继续处理存在的人物等其他逻辑...
  29. }

优化说明:

  1. 函数封装:将检查位置有效性的逻辑提取到 IsLocationValid 函数中,以减少主逻辑中的嵌套和复杂度。

  2. 使用 switch:在该函数内使用 switch 来更清晰地处理不同的 locationIndex 值。

  3. 简化主逻辑:在主循环中直接调用 IsLocationValid 函数,如果条件不满足则通过 continue 跳过当前迭代,保持了原有逻辑。

  4. 增强可读性:这样做使得整体代码结构更加清晰,易于理解和维护,同时也降低了出错的风险。

这种重构方式不仅提高了代码质量,还使得未来如果需要修改或扩展位置验证逻辑时,会更加方便。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21175

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?