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); }
原代码错误原因
&str是不可变引用,指向的静态字符串无法被修改,且*value + "a"会生成新的String,无法赋值给&str类型的元素(会导致悬垂引用,Rust编译器直接拦截)。- 固定大小的
[&str; 3]数组无法存储动态生成的String,因为两者类型不匹配,且&str的生命周期无法满足要求。
内容的提问来源于stack exchange,提问作者BoringSession
相关产品推荐
相关产品推荐

