如何合并if语句中同一变量的多条件判断
合并多条件判断的几种实现方式
原代码片段:
if (i != 0 && i != 15 && i != 20) { ... }
下面提供几种无需多个!=运算符的实现方式:
使用集合/哈希表判断
把需要排除的数值放进集合,直接判断当前值是否不在集合内。这种方式可读性强,后续修改排除值也方便:#include <unordered_set> // 建议定义成全局或静态变量,避免重复创建集合的开销 const std::unordered_set<int> exclude_nums = {0, 15, 20}; if (exclude_nums.find(i) == exclude_nums.end()) { ... }如果是Java环境,写法类似:
Set<Integer> excludeNums = new HashSet<>(Set.of(0, 15, 20)); if (!excludeNums.contains(i)) { ... }位运算判断(仅适用于小范围非负整数)
要是排除的数值都是较小的非负整数,可以用位掩码来实现。给每个排除值对应一个二进制位,将这些位设为1,然后判断当前值对应的位是否为0:const int exclude_mask = (1 << 0) | (1 << 15) | (1 << 20); if (!(exclude_mask & (1 << i))) { ... }注意:这种方法有局限性,数值不能超过所用整数类型的位宽(比如32位int的话,数值不能超过31),否则会出现溢出问题。
switch-case 分支处理
利用switch的穿透特性,匹配到排除值时直接跳过,default分支执行原逻辑:switch(i) { case 0: case 15: case 20: break; default: // 原代码块的逻辑 ... break; }
内容的提问来源于stack exchange,提问作者JWpark
相关产品推荐
相关产品推荐

