You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Map优化从字符串列表识别英文数字单词的Dart代码?

用Map简化英文数字单词转阿拉伯数字的实现

你提到的用Map来实现的思路非常合理,能大幅简化代码,彻底摆脱冗长的if-else分支。下面是具体的实现方案:

核心实现代码

class DetectNumber {
  final collection = <String>['Hello', 'nine', 'world', 'one', 'two'];
  // 定义英文数字与阿拉伯数字的映射表
  final numberMap = const {
    'zero': 0,
    'one': 1,
    'two': 2,
    'three':  3,
    'four': 4,
    'five': 5,
    'six': 6,
    'seven': 7,
    'eight': 8,
    'nine': 9,
  };

  void res() {
    // 通过集合操作链式处理,一步完成筛选与转换
    final resNumbList = collection
        .map((word) => numberMap[word]) // 用Map快速查找对应数字,非数字单词返回null
        .where((number) => number != null) // 过滤无效项
        .cast<int>() // 将可空类型转为非空int
        .toList();

    print(resNumbList); // 输出: [9, 1, 2]
  }
}

代码说明

  1. 映射表定义:numberMap把所有英文数字单词作为键,对应阿拉伯数字作为值,后续查找直接通过键取值,逻辑清晰且高效。
  2. 链式集合操作:
    • map:遍历列表每个元素,通过映射表获取对应数字;
    • where:过滤掉映射表中不存在的单词(即返回null的项);
    • cast<int>:解决map返回的可空类型问题,转为非空整数;
    • toList:将处理后的结果转为目标列表。

可选优化:忽略大小写匹配

如果你的列表中存在大小写不一致的数字单词(比如Nine、ONE),可以在查找时统一转为小写,增强兼容性:

final resNumbList = collection
    .map((word) => numberMap[word.toLowerCase()])
    .where((number) => number != null)
    .cast<int>()
    .toList();

这种实现方式的优势很明显:后续要扩展数字范围(比如添加ten、eleven),只需要在numberMap中新增键值对即可,维护成本远低于原来的if-else分支结构。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:35:17