Rust嵌套遍历两个Vec出现编译错误,如何实现字符逐一对比计数?
编译错误原因
counter为默认不可变绑定,无法直接修改值,且Rust不支持++自增语法- 直接用
for x in vec遍历会转移vec的所有权,内层循环第一次执行后apple_vec就被消费,后续外层循环访问会报错 - 嵌套循环的逻辑不符合逐位对比的需求,当前逻辑是两个集合的所有元素两两配对遍历,不是同索引位置对比
最终实现代码
你要的逐位对比统计不匹配次数的实现如下:
fn main() { let apple = String::from("apple"); let accle = String::from("accle"); let mut counter = 0; // 直接对两个字符串的字符迭代器按位配对遍历,无需提前转Vec for (a_char, b_char) in apple.chars().zip(accle.chars()) { if a_char != b_char { counter += 1; } } // 如果需要将两个字符串长度不同的部分也计入不匹配次数,放开下面的注释即可 // counter += apple.chars().count().abs_diff(accle.chars().count()); println!("counter is {}", counter); }
核心修改点
- 给
counter添加mut关键字声明为可变绑定,使用+= 1代替不支持的++语法 - 用
zip方法将两个字符迭代器按位配对,直接遍历同位置的两个元素,避免嵌套循环逻辑错误 - 去掉了不必要的
Vec转换步骤,直接对字符串的chars()迭代器操作,性能更优
内容的提问来源于stack exchange,提问作者spaceghost
相关产品推荐
相关产品推荐

