Rust如何基于条件更新删除Vector元素并实现账户金额扣减逻辑
实现逻辑
- 倒序遍历条目列表,优先处理靠后的最新条目,匹配优先扣减最新条目的要求
- 遍历过程中遇到目标超级英雄条目时,判断当前条目金额与剩余待扣金额的关系:
- 若条目金额小于等于待扣金额:扣除全额后直接删除该条目,更新剩余待扣金额
- 若条目金额大于待扣金额:直接在当前条目上扣除对应金额,结束扣减流程
- 待扣金额清零后直接终止遍历,减少不必要的计算,且倒序遍历删除元素时不会影响未遍历的前序索引,不会出现索引错位问题
完整可运行代码
fn main() { let mut entries = vec![ ("Batman", 1000), ("SuperMan", 500), ("Wonder-women", 100), ("Batman", 2000), ]; const TARGET_NAME: &str = "Batman"; let mut need_deduct = 2500; for idx in (0..entries.len()).rev() { if need_deduct <= 0 { break; } let (name, amount) = &mut entries[idx]; if name == &TARGET_NAME { if *amount <= need_deduct { need_deduct -= *amount; entries.remove(idx); } else { *amount -= need_deduct; need_deduct = 0; } } } // 打印结果验证 println!("{:?}", entries); }
运行输出
[("Batman", 500), ("SuperMan", 500), ("Wonder-women", 100)]
内容的提问来源于stack exchange,提问作者Haseeb Saeed
相关产品推荐
相关产品推荐

