当前位置: 首页 > 知识库问答 >
问题:

矢量在 Rust 中存储混合类型的数据 [重复]

闻人冷勋
2023-03-14

在将中缀表达式转换为后缀表达式的上下文中,使用分流码算法。我想使用一个向量来存储输出,它将存储运算符和数字类型数据。

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Operator {
    Add,
    Sub,
    Mul,
    Div,
}

fn main() {
    let mut output: Vec<String> = Vec::new();  // create an output vector
    let a = 2;
    let b = Operator::Add;
    let c = 3;
    output.push(a.to_string());
    output.push(b.to_string());
    output.push(c.to_string());
}

上面的代码当然不会编译,因为to_string()方法没有为运算符定义。我看到两种方法来修复它:

  1. 定义 to_string() 方法
  2. 创建一个向量来存储对数字和运算符的引用。

我认为第二个是首选,尽管我不知道创建引用向量是否会带来很多复杂性。

共有1个答案

何华灿
2023-03-14

没有必要使用引用;只需将数字和运算符直接存储在枚举中:

enum Thing {
    Op(Operator),
    Number(i32),
}

fn main() {
    let mut output: Vec<Thing> = Vec::new();
    let a = 2;
    let b = Operator::Add;
    let c = 3;
    output.push(Thing::Number(a));
    output.push(Thing::Op(b));
    output.push(Thing::Number(c));
}

然后在取出时将其与匹配。

 类似资料:
  • 我有如下数据表示: 我需要在我的C应用程序中访问这些数据。我还需要能够通过可变键名关联地访问项目;例如: A<code>std::vector 我有办法做到这一点吗?我确实更喜欢使用向量和地图,但我对其他解决方案持开放态度,只要我可以关联地访问数据项。 使用这里描述的模板是可行的方法吗?

  • 问题内容: 所以我的问题是,我在Android(Java)上编写了一个函数,该函数需要两个Double,两个Int和一个Calendar对象。我相信提供的允许它在单独的线程中运行的类AsyncTask仅接受一种类型的Object(但允许多种)作为参数,因此我认为我可以将其放入List或LinkedList或其他内容中。 是否存在允许多个数据类型()的类型,还是我必须创建自己的对象类?我是一个新手程

  • 我们有一个DynamoDb表,其中一个列名“createdAt”有时创建为S(String)数据类型,有时创建为N(Number)数据类型。 在我的代码中,如果我定义为String,当我想获取数据时它会失败,它是数字: 如果我定义为Number,当我想获取数据并且它是表中的字符串时失败: 你们有没有人以前也有过同样的问题?应该有办法解决它对吗?并且不能只选择一种数据类型:(

  • 问题内容: 在MySQL中存储时区偏移的正确数据类型/结构是哪一种?我只想存储数字值(城市和国家显然存储在其他列中)。 例子: -5:00瓜亚基尔(ECU) -4:30委内瑞拉加拉加斯 0:00一些城市 2:00德国波恩 问题答案: 您应该使用。这是完成任务的正确数据类型:您已设置格式并可以进行计算。此外,根据文档,还应该将其用作两个时刻之间差异的结果,这实际上就是时区。 从文档: MySQL检索

  • 问题内容: 我出现了不想要的行为,即,它更改了进入原始函数的参数的数据类型。我最初的问题是关于一般情况的,我将使用这个新问题来提出更具体的情况。 (为什么要问第二个问题?为了说明问题,我创建 了一个关于更具体案例 的问题-从具体问题到更一般的问题总是比较容易。而且我 单独 创建了这个问题,因为我认为这是有助于保持一般情况以及对一般情况的答复(应该找到),而不会因为考虑解决任何特定问题而受到“污染”

  • 我需要创建一个类,它可以在变量中存储、或类型的值。 我想声明一个变量,因为只有一个特定类型的对象将用于初始化类的实例。为每种类型声明一个变量将浪费资源,因为只会使用一个。 考虑这一点: 然后执行: 理想情况下,在控制台中获得正确的输出。 我研究了仿制药和其他东西,但找不到我需要的东西。你能告诉我我在找什么吗? < code>Container中的< code>getObject()可以处理带有<