为了优化这段代码,我们可以将判断逻辑提取到一个函数中,从而减少重复的代码并提高可读性。下面是优化后的代码示例:
// 检查位置是否有效的函数
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;
// 在这里继续处理存在的人物等其他逻辑...
}
优化说明:
函数封装:将检查位置有效性的逻辑提取到
IsLocationValid
函数中,以减少主逻辑中的嵌套和复杂度。使用
switch
:在该函数内使用switch
来更清晰地处理不同的locationIndex
值。简化主逻辑:在主循环中直接调用
IsLocationValid
函数,如果条件不满足则通过continue
跳过当前迭代,保持了原有逻辑。增强可读性:这样做使得整体代码结构更加清晰,易于理解和维护,同时也降低了出错的风险。
这种重构方式不仅提高了代码质量,还使得未来如果需要修改或扩展位置验证逻辑时,会更加方便。
内容由零声教学AI助手提供,问题来源于学员提问