Yun*_*ung 1 string vector type-conversion rust
我想知道如何将样式字符串转换为向量。假设我有一个具有以下值的字符串:
“[x,y]”
-我怎样才能把它变成一个向量,其中x作为第一个对象,y作为第二个对象?
谢谢!
当然可以,但是元素不能作为引用。正如 @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)
或者您也可以使用正则表达式来分解它,但您可以自己研究一下它是如何工作的。