在 Rust 中如何将字符串转换为向量?

Yun*_*ung 1 string vector type-conversion rust

我想知道如何将样式字符串转换为向量。假设我有一个具有以下值的字符串:

“[x,y]”

-我怎样才能把它变成一个向量,其中x作为第一个对象,y作为第二个对象?

谢谢!

Loc*_*cke 5

当然可以,但是元素不能作为引用。正如 @prog-fh 所提到的,这在 Rust 中是不可能的,因为一旦编译,变量名称可能不会被存储,编译器甚至可能在优化期间删除了一些变量名称。

ast.literal_eval然而,您可以使用带有Rust 对象表示法(RON,一种类似于 Rust 数据结构的序列化类型)的Serde 来执行与 Python 类似的操作。它并不完美,但它是一个选择。但是,它确实要求您知道要尝试解析的类型。

use ron::from_str;

let input = "[37.6, 24.3, 89.023]";
let parsed: Vec<f32> = from_str(input).unwrap();
Run Code Online (Sandbox Code Playgroud)

另一方面,如果 @mcarton 是正确的并且您想要类似的东西vec!["x", "y"],您可以像这样手动解析它:

fn parse(input: &str) -> Option<Vec<String>> {
    let mut part = String::new();
    let mut collected = Vec::new();

    let mut char_iter = input.chars();

    if char_iter.next() != Some('[') {
        return None
    }

    loop {
        match char_iter.next()? {
            ']' => {
                collected.push(part);
                return Some(collected)
            }
            ',' | ' ' => {
                if !part.is_empty() {
                    collected.push(part);
                    part = String::new();
                }
            }
            x => part.push(x),
        }
    }
}

println!("{:?}", parse("[a, b, foo]"));
Run Code Online (Sandbox Code Playgroud)

或者您也可以使用正则表达式来分解它,但您可以自己研究一下它是如何工作的。