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

Rust中如何遍历String类型向量并修改其元素内容?

Rust遍历并修改字符串集合的正确方式

你的代码问题出在**&str是不可变的字符串切片**,没法直接修改或赋值新的字符串内容,而且静态字符串(比如"Hello")存在只读内存中,不能被修改。下面是两种可行的解决方案:

方案一:使用Vec<String>(推荐)

String是拥有所有权的可修改字符串类型,直接用它的集合来操作:

// 初始化String向量
let mut val = vec!["Hello".to_string(), "Hi".to_string(), "Hey".to_string()];
// 或者更简洁的写法:
// let mut val = vec!["Hello", "Hi", "Hey"].into_iter().map(String::from).collect();

for value in &mut val {
    // 直接在原字符串末尾追加字符,效率最高
    value.push('a');
    // 如果需要拼接字符串而非单个字符,也可以这么写:
    // *value = format!("{}a", value);
    println!("{}", value);
}

方案二:从&str数组转换为Vec<String>

如果必须从现有的&str数组开始,先转成String的向量再修改:

let original_val: [&str; 3] = ["Hello", "Hi", "Hey"];
// 把每个&str转换成String
let mut val = original_val.iter().map(|s| s.to_string()).collect::<Vec<_>>();

for s in &mut val {
    s.push('a');
    println!("{}", s);
}

原代码错误原因

  1. &str是不可变引用,指向的静态字符串无法被修改,且*value + "a"会生成新的String,无法赋值给&str类型的元素(会导致悬垂引用,Rust编译器直接拦截)。
  2. 固定大小的[&str; 3]数组无法存储动态生成的String,因为两者类型不匹配,且&str的生命周期无法满足要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:18:11