如何在Rust中将Vec<&str>转换为Vec<String>?ARFF文件读取场景
在Rust中将Vec<&str>转换为Vec的方法
在Rust里把Vec<&str>转成Vec<String>,核心是将每个字符串切片转换为拥有所有权的String,常用以下几种方式:
1. 直接通过collect()自动转换
如果你的&str来自迭代器(比如字符串分割后的结果),可以直接调用collect(),Rust会利用From<&str> trait自动完成转换:
// 从字符串分割得到&str迭代器,直接收集为Vec<String> let parts: Vec<String> = line.split_whitespace().collect();
这种方式简洁高效,适合不需要额外处理的场景。
2. 显式用map()自定义转换
如果需要在转换前对每个&str做处理(比如修剪字符、格式化),可以结合map()和to_string():
// 处理ARFF标称属性的取值,先修剪特殊字符再转成String let nominal_values: Vec<String> = parts[3..] .iter() .map(|s| s.trim_matches(|c| c == '{' || c == '}' || c == ',').to_string()) .collect();
这里trim_matches()先移除字符串两端的{、}、,字符,再通过to_string()将处理后的&str转为String,最后收集成Vec<String>。
注意:修正错误代码
你提供的代码里这一行存在写法错误:
let parts: Vec<String> = map(AsRef::as_ref).line.split_whitespace().collect();
正确的写法应该是在迭代器后调用map,且AsRef::as_ref无法完成&str到String的转换,若要显式转换,应写成:
let parts: Vec<String> = line.split_whitespace().map(|s| s.to_string()).collect();
在ARFF文件解析中的应用
结合你解析ARFF文件的需求,这些转换可以用来:
- 提取属性名称、类型并存储为
String,方便后续持久化或修改 - 处理标称属性的可选值集合,将切片转换为拥有所有权的
String数组 - 存储实例的属性值,确保数据拥有独立所有权,避免生命周期限制
内容的提问来源于stack exchange,提问作者Madhouse1999
相关产品推荐
相关产品推荐

