【发布时间】:2017-03-10 16:20:30
【问题描述】:
我正在使用 serde 序列化 HashMap,如下所示:
#[derive(Serialize, Deserialize)]
struct MyStruct {
map: HashMap<String, String>
}
HashMap 的密钥顺序未指定,并且由于散列是随机的(请参阅 documentation),因此密钥实际上最终会在相同的运行之间以不同的顺序出现。
我希望我的HashMap 按排序(例如字母顺序)键顺序进行序列化,以便序列化具有确定性。
我可以使用BTreeMap 而不是HashMap 来实现这一点,因为BTreeMap::keys() 按排序顺序返回它的键,但我不想仅仅为了适应序列化逻辑而更改我的数据结构。
如何告诉 serde 在序列化之前对 HashMap 键进行排序?
【问题讨论】:
-
注意:您可能对 bluss 的OrderMap 感兴趣,这是一个 HashMap,其迭代顺序仅取决于元素插入和删除的顺序。