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
相关产品推荐
相关产品推荐

