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

Rust高效构建String的方法及元音移除函数写法优化咨询

字符追加优化

你对to_string()写法的疑问是完全正确的,这种写法会为每个字符额外生成临时String对象,带来不必要的性能开销。Rust的String类型原生提供push()方法,直接接收char类型参数即可完成字符追加,不需要额外做类型转换:

no_vowels.push(c);

另外你不需要修改遍历逻辑:Rust的String是UTF-8编码的字节序列,直接按长度遍历字节会无法处理多字节的Unicode字符,使用chars()迭代器遍历字符是标准的合规实现,没有问题。

返回值写法优化

你的代码里的return语句不是必需的。Rust惯例是函数最后一个没有分号的表达式会自动作为返回值,你直接把最后一行的return no_vowels;改成no_vowels就符合惯例了。

修改后的常规实现版本如下:

fn remove_vowels(s: String) -> String {
    let mut no_vowels = String::new();
    for c in s.chars() {
        if !['a', 'e', 'i', 'o', 'u'].contains(&c) {
            no_vowels.push(c);
        }
    }
    no_vowels
}

更地道的Rust实现

你还可以用迭代器 + 函数式写法进一步简化代码,不需要手动声明可变的中间String变量:

fn remove_vowels(s: String) -> String {
    s.chars()
        .filter(|c| !['a', 'e', 'i', 'o', 'u'].contains(c))
        .collect()
}

这里的filter会过滤掉所有元音字符,最后调用collect()方法时,Rust会根据函数返回值类型自动把迭代器中的字符组装成新的String,这是业内更常用的写法。
如果需要同时过滤大写元音,可以在判断时统一转成小写:

.filter(|c| !['a', 'e', 'i', 'o', 'u'].contains(&c.to_ascii_lowercase()))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:02