从包含 str 的对象向量中获取 str 的数组切片

Get array slice of str from vector of objects containing str

我有一个 objects/instances 的向量(不确定 rust 的说法是什么),它有一个包含字符串切片的字段。我需要创建一个包含字符串切片字段的数组切片。以下是我的尝试。我试图让 foo_barswhat_i_want 相同。

struct Foo<'a> {
    bar: &'a str,
}
let foos = vec![Foo { bar: "one" }, Foo { bar: "two" }, Foo { bar: "three" }];
let foo_bars: Vec<str> = foos.into_iter().map(|foo| foo.bar).collect();

let what_i_want = &["one", "two", "three"];

您在 Vec<&str> 中缺少 &

这是一个有效的playground

struct Foo<'a> {
    bar: &'a str,
}

fn main() {
    let foos = vec![Foo { bar: "one" }, Foo { bar: "two" }, Foo { bar: "three" }];
    let foo_bars: Vec<&str> = foos.into_iter().map(|foo| foo.bar).collect();

    let what_i_want = &["one", "two", "three"];

    println!("{:?}", foo_bars == what_i_want);
}

一切都必须有固定的大小,str表示字符串中的字符范围,字符串切片的大小可以是非常大的。

您需要使用指针&。指针是固定大小的 (usize)。取决于 cpu 架构(32 或 64)位。

let foo_bars: Vec< str> = foos.into_iter().map(|foo| foo.bar).collect();
                  ^ add a `&` here