我试图将旧的个人Java项目转换为Rust作为学习体验。基本数据结构如下所示:
Library
。 Library
有作者列表和书籍列表。在Java程序中,我决定在程序中每本书(" The Hobbit")不应该存在多个对象。如果一本新书(可能通过用户输入)进入系统,我要做的第一件事就是测试它是否已经在Library
中,然后将用户输入替换为{{1的书籍对象}}。这大大简化了很多逻辑,因为你总是可以指望通过引用来比较书籍是有效的。
无论如何,我现在正在Rust中重写这段代码,而且我遇到了有关在内存中组织数据的问题。
拥有Library
集合Library
的{{1}}是直截了当的。但是,我如何整理书籍?
在Java中,Authors
包含一个Library
,其中包含所有可以在固定时间内查找图书的书籍。每个HashMap
还有一个书籍列表(按日期排序),这样就可以列出作者的所有书籍。
但是,除非我弄错了,否则Rust中的Author
不能包含对结构的引用。所以,对我来说,似乎不可能让每个Vec
都有Author
中书籍的引用向量。
我该怎么做?是否可以保留此结构而不具有相同Library
结构的多个副本?我真的希望能够说Book
然后在整个程序中更改标题。
答案 0 :(得分:2)
鉴于您的代码示例已经具有ID,解决方案可以很简单:
Library
会有一个哈希映射或BTree将BookId
映射到其Book
BookId
当然,您也可以使用AuthorId
和Author
执行相同操作。
另一种可能性是使用Rc
和Weak
,但除非谨慎管理,否则可能会出现内存泄漏。