You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

值与变量的双向映射编码:替代if-else语句的最优代码实现方案问询

嘿,这个场景太常见啦!要替代一堆if-else来实现这种固定的双向映射,哈希映射表(字典)绝对是最优解——不管是代码可读性、扩展性还是性能,都甩条件判断几条街。

为什么选哈希映射表?
  • 性能拉满:查找时间复杂度是O(1),哪怕以后映射关系加到几十上百组,速度都不会变慢,比链式if-else的O(n)高效太多
  • 可读性强:所有映射关系一目了然,别人看代码一眼就懂你要做什么,不用在一堆条件里找逻辑
  • 扩展性好:要加新的映射对?直接往表里加一行就行,不用改一堆if-else分支,维护成本极低
具体代码实现(主流语言示例)

Python

# 先定义好所有双向映射关系
pair_map = {1: 2, 2: 1, 3: 4, 4: 3, 5: 6, 6: 5}

# 给B赋值只需要一行
A = 1
B = pair_map[A]  # 此时B=2

JavaScript

// 定义映射表
const pairMap = {1: 2, 2: 1, 3: 4, 4: 3, 5: 6, 6: 5};

// 快速赋值
let A = 2;
let B = pairMap[A]; // 此时B=1

Java

import java.util.HashMap;
import java.util.Map;

public class PairMapping {
    public static void main(String[] args) {
        Map<Integer, Integer> pairMap = new HashMap<>();
        // 批量添加映射关系
        pairMap.put(1, 2);
        pairMap.put(2, 1);
        pairMap.put(3, 4);
        pairMap.put(4, 3);
        pairMap.put(5, 6);
        pairMap.put(6, 5);
        
        int A = 3;
        int B = pairMap.get(A); // 此时B=4
    }
}
额外小技巧:如果映射有数学规律

看你的映射是1-2、3-4这种奇数和相邻偶数互转的规律,其实还可以用数学公式直接计算,连映射表都省了:

B = A + 1 if A % 2 == 1 else A - 1

这种方式更轻量化,但只适用于映射有明确规律的场景。如果以后映射关系变复杂(比如改成1→3、2→5这种无规律的),还是哈希映射表更灵活。

为啥不推荐其他方式?
  • 链式if-else:映射多了会变成“面条代码”,维护起来要改一堆分支,容易出错
  • switch-case:虽然比if-else整洁,但扩展性还是不如哈希表,而且很多语言对switch支持的类型有限(比如Python就没有switch)

内容的提问来源于stack exchange,提问作者Salil Bagga

火山引擎 最新活动