【发布时间】:2017-12-07 14:55:39
【问题描述】:
我想在内存中表示一个数据表,如下所示:
| USD | EUR |
-----+-----+-----+
John | 100 | 50 |
-----+-----+-----+
Tom | 300 | 200 |
-----+-----+-----+
Nick | 200 | 0 |
-----+-----+-----+
有一组已知的人,每个人都拥有一些货币。
我有以下枚举:
enum Person {
John,
Tom,
Nick
}
enum Currency {
USD,
EUR
}
我想将此数据编码为 2D 数组,如果能够不按 usize 而是按 enum 来索引数组元素,那就太酷了。例如:
data[Person::John][Currency::USD] = 100;
是否可以在 Rust 中处理数组和枚举?或者是否有任何其他数据结构可以为此服务?
我知道HashMap,但这并不是我想要的,因为:
HashMap在堆上工作(这使得它比常规的堆栈分配数组慢得多)HashMap不保证该项目存在。例如。每次我想得到一些东西时,我都必须打开它并处理None的情况,这与使用普通数组相比不是很方便。
这与How do I match enum values with an integer? 不同,因为我对将枚举转换为usize 不感兴趣;我只是想要一种方便的方法来通过枚举访问数组/映射项。
【问题讨论】:
-
为什么不使用 Person 和 Currency 作为 Trait 并在 John、Tom、Nick 和 USD、EUR 上实现这些特征?
-
听起来你想要一个从名称-货币对到一个值的关联数组。你尝试过什么吗?
HashMap? -
> 为什么不使用 Person 和 Currency 作为 Trait 并在 John、Tom、Nick 和 USD、EUR 上实现这些特征?我不确定我是否有这个想法,但无论如何我想要 USD 和 EUR 枚举,因为在我的应用程序的其他地方我需要它们作为枚举。 > 听起来您想要一个从名称-货币对到值的关联数组。你尝试过什么吗?谢谢你的答复。我知道 HashMap 但这并不是我所需要的。 HashMap 在堆上工作。