C++如何判断输入变量是否等于多个给定值中的任意一个?
优雅实现方案
方案1:集合包含判断(全语言通用,最高效简洁)
提前把所有目标值存入预定义的集合常量,调用语言内置的包含判断方法即可,语法简洁且查找效率为O(1),远优于多条件或switch写法:
// 预定义全局复用的合法值集合 const ALLOWED_INPUTS = new Set([1, 5, 10, 25, 100]) // 业务逻辑处直接判断 if (ALLOWED_INPUTS.has(user_input)) { // 匹配成功逻辑 } else { // 匹配失败逻辑 }
其他语言的实现逻辑完全一致:
- Python:
ALLOWED_INPUTS = {1,5,10,25,100},判断用if user_input in ALLOWED_INPUTS: - Java:预定义常量
private static final Set<Integer> ALLOWED_INPUTS = new HashSet<>(Arrays.asList(1,5,10,25,100));,判断用ALLOWED_INPUTS.contains(userInput) - Go:
var allowedInputs = map[int]struct{}{1:{},5:{},10:{},25:{},100:{}},判断用if _, ok := allowedInputs[userInput]; ok {
方案2:封装为独立工具函数(复用性最强)
如果需要多处使用该判断逻辑,直接封装成函数即可,不用重复写判断代码:
def is_valid_input(input_val: int) -> bool: allowed = {1,5,10,25,100} return input_val in allowed # 任意业务处直接调用 if is_valid_input(user_input): # 匹配逻辑
方案3:哈希表映射(适合匹配后有分支逻辑的场景)
如果匹配到不同数值需要执行不同的操作,不想写冗长的switch case,可以用哈希表存储数值和对应逻辑的映射,代码可读性更高:
const inputAction = { 1: () => handleInput1(), 5: () => handleInput5(), 10: () => handleInput10(), 25: () => handleInput25(), 100: () => handleInput100() } // 调用逻辑 if (inputAction[user_input]) { inputAction[user_input]() } else { // 默认兜底逻辑 }
优势说明
- 后续要新增、删除合法数值,只需要修改预定义的集合/映射表即可,不需要改动业务判断逻辑,可维护性极强
- 集合查找效率远高于多条件或遍历判断,数值越多性能优势越明显
- 代码结构清晰,没有冗余的重复判断逻辑
内容的提问来源于stack exchange,提问作者Circlesho
相关产品推荐
相关产品推荐

