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

Rust新手求助:将&str迭代器转换为Vec<String>的更简洁或惯用实现方式

优化&str迭代器转Vec的Rust惯用写法

嘿,作为Rust新手能写出这样的代码已经很赞啦!你当前的实现其实已经很合理,但确实有更简洁、更符合Rust惯用风格的写法,而且性能上和你现在的代码完全一致,只是语法更紧凑~

先看你现有的代码:

let contents = fs::read_to_string(config.filename)?;
let la : Vec<String> = contents.lines().map( |x| String::from(x) ).collect();

方法1:使用str::to_string方法

&str类型本身就自带to_string()方法,我们可以直接把闭包替换成方法引用,让代码更简洁:

let contents = fs::read_to_string(config.filename)?;
let la: Vec<String> = contents.lines().map(str::to_string).collect();

方法2:利用Into trait(最惯用的简洁写法)

因为&str实现了Into<String>这个标准库trait,所以我们可以直接用Into::into来做类型转换,这是Rust中处理类型转换非常惯用的方式:

let contents = fs::read_to_string(config.filename)?;
let la: Vec<String> = contents.lines().map(Into::into).collect();

补充说明

这几种写法底层逻辑完全一致——String::from(x)、x.to_string()和Into::into(x)对于&str来说,最终都是调用相同的字符串拷贝逻辑,所以性能没有差异,只是语法风格不同。如果上下文能自动推断出la的类型是Vec<String>,你甚至可以省略: Vec<String>的类型标注,让代码更清爽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:32:35