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

Flutter中如何比对int值与List<Map<String,int>>列表获取对应匹配项

Flutter金额匹配对应报价份数实现

实现逻辑

先对规则列表按金额阈值做升序排序,避免原始列表顺序错乱导致匹配错误,之后倒序遍历规则,找到第一个阈值小于输入金额的规则,返回对应的报价份数即可,同时兼容金额低于最低阈值的边界场景。

完整代码示例

// 报价匹配规则
final List<Map<String, int>> quoteRules = [
  {"quote": 3, "money": 3000},
  {"quote": 6, "money": 7000},
  {"quote": 8, "money": 8000}
];

/// 根据输入的采购总金额,返回需要提供的报价份数
int getRequiredQuoteNum(int totalAmount) {
  // 先按金额阈值从小到大排序,兼容规则列表顺序打乱的场景
  quoteRules.sort((a, b) => a['money']!.compareTo(b['money']!));

  // 金额未超过最低阈值的场景,可根据业务需求调整返回值
  if (totalAmount <= quoteRules.first['money']!) {
    return 0; // 例:低于3000无需报价返回0,若要求固定2份可直接修改为2
  }

  // 倒序遍历,优先匹配高阈值档位
  for (final rule in quoteRules.reversed) {
    final int threshold = rule['money']!;
    if (totalAmount > threshold) {
      return rule['quote']!;
    }
  }
  return 0;
}

效果验证

void main() {
  print(getRequiredQuoteNum(2500));  // 0,未达3000阈值
  print(getRequiredQuoteNum(3500));  // 3,超过3000未达7000
  print(getRequiredQuoteNum(7000));  // 3,刚好7000不属于"超过"范畴,匹配3000档位
  print(getRequiredQuoteNum(7200));  // 6,超过7000未达8000
  print(getRequiredQuoteNum(9000));  // 8,超过8000
}

注意事项

  • 后续新增/调整报价档位时,只需要修改quoteRules列表内容即可,不需要改动匹配逻辑
  • 如果金额是从文本输入框获取,先将输入的字符串转为数值类型,做好空值、格式错误的兼容处理
  • 如果业务规则改成「金额大于等于阈值就触发对应档位」,只需要把判断条件里的>改成>=即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:45:58