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

如何将Vec<String>转换为字符串切片数组&[&str]?

Rust中Vec转&[&str]调用函数的方法

要调用接收&[&str]参数的函数,只需把Vec<String>里的每个元素转换成&str,再组成符合要求的切片即可,有两种简洁的实现方式:

方式一:显式生成临时Vec

先将Vec<String>中的每个String转为&str并收集到临时Vec中,再将这个临时Vec的引用传给函数(Vec<T>可以自动解引用为&[T]):

fn main() {
    let colours: Vec<String> = vec!["blue".to_string(), "red".to_string(), "yellow".to_string()];
    
    let str_refs: Vec<&str> = colours.iter().map(|s| s.as_str()).collect();
    mix_colours(&str_refs);
}

fn mix_colours(strings: &[&str]) {
    // 示例逻辑:遍历打印颜色
    for colour in strings {
        println!("{}", colour);
    }
}

方式二:调用时直接生成临时切片

无需额外变量,直接在函数调用过程中完成转换,代码更紧凑:

fn main() {
    let colours: Vec<String> = vec!["blue".to_string(), "red".to_string(), "yellow".to_string()];
    
    mix_colours(&colours.iter().map(|s| s.as_str()).collect::<Vec<_>>());
}

fn mix_colours(strings: &[&str]) {
    // 函数逻辑
}

原理说明

  • String的as_str()方法会返回指向其内部字符串数据的不可变&str引用,由于colours在main作用域内有效,这些&str的生命周期完全能覆盖mix_colours的调用周期。
  • 你也可以用&*s替代s.as_str(),这是因为String实现了Deref<Target=str>,解引用后再取引用的效果和as_str()一致,但as_str()可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:35:59