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 (...

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

// 检查位置是否有效的函数
bool IsLocationValid(int locationIndex, bool isNewVersion, int location) {
    if (!isNewVersion) {
        switch (locationIndex) {
            case 1: return (location == 1);
            case 2: return (location == 2 || location == 4 || location == 5);
            case 3: return (location == 3 || location == 6);
            default: return false; // 默认情况下返回 false
        }
    } else {
        switch (locationIndex) {
            case 1: return (location == 1 || location == 4);
            case 2: return (location == 2 || location == 5 || location == 6);
            case 3: return (location == 3 || location == 7 || location == 8);
            default: return false; // 默认情况下返回 false
        }
    }
}

// 遍历位置点地图
for (auto iter = locationPointMap.begin(); iter != locationPointMap.end(); ++iter) {
    std::shared_ptr<LocationPoint> obj = iter->second;

    if (!IsLocationValid(locationIndex, isNewVersion, obj->location)) {
        continue; // 条件不满足时跳过当前循环
    }

    obs_location_t location;
    location.location = obj->location;
    
    bool exist_person = false;

    // 在这里继续处理存在的人物等其他逻辑...
}

优化说明:

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

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?