如何将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
相关产品推荐
相关产品推荐

