Rust中Vec调用dedup方法对有序向量去重未返回预期结果
问题原因
- Rust 标准库中
Vec的dedup()方法属于原地操作方法,不会返回去重后的新向量,它的返回值为单元类型(),也就是你代码中输出的Result: ()。 - 该方法会直接修改传入的可变向量,移除其中连续的重复元素,仅保留每个连续重复组的第一个元素,你传入的本身就是有序向量,刚好符合
dedup()的去重要求。
修正方案
你只需要在调用dedup()之后直接打印修改后的原向量即可,修正后的代码如下:
fn main() { let mut input = vec![1, 1, 2, 3, 3]; remove_dup(&mut input); } fn remove_dup(input: &mut Vec<u32>) { input.dedup(); println!("Result: {:?}", input); }
运行后输出结果为:
Result: [1, 2, 3]
如果你不想修改原输入向量,可以先克隆一份再执行去重操作:
fn main() { let input = vec![1, 1, 2, 3, 3]; let result = remove_dup(&input); println!("Result: {:?}", result); // 原input不会被修改 println!("Original input: {:?}", input); } fn remove_dup(input: &Vec<u32>) -> Vec<u32> { let mut cloned_input = input.clone(); cloned_input.dedup(); cloned_input }
内容的提问来源于stack exchange,提问作者Caio Ishikawa
相关产品推荐
相关产品推荐

