gpt4 book ai didi

rust - 在两个单独的向量中创建对 rust 字符串的引用

转载 作者:行者123 更新时间:2023-12-02 01:50:24 25 4
gpt4 key购买 nike

我有一个输入 String 的向量,我想创建两个包含对这些字符串的引用 &str 的向量。这是我正在尝试的简化版本(输入被替换为简单的向量初始化):

let colours = vec!["red".to_string(), "black".to_string(), "blue".to_string()];
let mut starts_with_b = Vec::new();
let mut ends_with_e = Vec::new();

for colour in colours {
if colour.starts_with("b") {
starts_with_b.push(&*colour);
}
if colour.ends_with("e") {
ends_with_e.push(&*colour);
}
}

println!("{:?}", starts_with_b);
println!("{:?}", ends_with_e);

此代码会产生编译器错误“'colour' does not live long enough”。我该如何解决这个问题?

我已经看到,如果我从字符串引用开始,这个问题就不存在了,&str:

let colours = vec!["red", "black", "blue"];
let mut starts_with_b = Vec::new();
let mut ends_with_e = Vec::new();

for colour in colours {
if colour.starts_with("b") {
starts_with_b.push(colour);
}
if colour.ends_with("e") {
ends_with_e.push(colour);
}
}

println!("{:?}", starts_with_b);
println!("{:?}", ends_with_e);

最佳答案

您的代码的问题来自于临时 colour变量是一个移动 String ,这意味着它非常短暂。在你的starts_with_bends_with_e您需要存储对 colours 中值的引用的向量,只需移动 colours 中的值即可轻松完成在迭代它们的同时。最简单的方法是这样做:

for colour in &colours {

而不是这个:

for colour in colours {

那边colour将是 &String 类型,而不是(移动)String , 所以你可以简单地按下 colour直接。

请注意,starts_with_b 的类型和 ends_with_e将是 Vec<&String>而不是 Vec<&str> ,正如你所要求的。我认为这对您来说不是问题,但如果是,您可以轻松地制作它们 Vec<&str>只需调用 push(&colour[..])而不是 push(colour) .

关于rust - 在两个单独的向量中创建对 rust 字符串的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70402902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com