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

Rust中按首次出现顺序用第二个vector元素替换第一个vector对应元素的方法

向量对应关系示意图

优化实现方案

你原始的代码时间复杂度为O(n²),每次识别到首次出现的新元素都要全量遍历vec1做替换,存在冗余操作,vec1元素量较大时性能偏低。推荐使用哈希映射构建对应关系的方案,时间复杂度可优化至均摊O(n)。
核心逻辑是先遍历一次vec1,按元素首次出现的顺序绑定vec2的对应值存入哈希表,再遍历一次vec1完成替换即可,实现代码如下:

use std::collections::HashMap;

fn main() {
    let vec1: Vec<&str> = vec!["12345","12345","11111","12345","11111"];
    let vec2: Vec<&str> = vec!["abc","xyz"];
    let mut mapping = HashMap::new();
    let mut vec2_idx = 0;

    // 首次遍历构建原始值到目标值的映射
    for &original_val in &vec1 {
        mapping.entry(original_val).or_insert_with(|| {
            let target_val = vec2[vec2_idx];
            vec2_idx += 1;
            target_val
        });
    }

    // 生成替换后的新向量,也可以直接修改原vec1
    let replaced_vec: Vec<&str> = vec1.iter().map(|&val| mapping[val]).collect();
    println!("{:?}", replaced_vec); // 输出 ["abc", "abc", "xyz", "abc", "xyz"]
}

注意事项

  • 需保证vec2的长度 ≥ vec1去重后的元素数量,否则会触发数组下标越界panic,可根据业务需求提前做长度校验,或者补充缺省值逻辑。
  • 如果vec1的元素类型没有实现Hash、Eq trait,可以改用BTreeMap替代HashMap,仅需要元素实现Ord trait即可,不过性能会略低一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:04