我正在尝试将一个旧的个人Java项目转换为Rust,作为一种学习体验。基本数据结构如下所示:
库
。图书馆
有作者列表和书籍列表
在Java程序中,我决定程序中的每本书(“霍比特人”)不应该存在多个对象。如果一本新书(可能通过用户输入)进入系统,我要做的第一件事是测试它是否已经在库中
,然后用库中的book对象替换用户输入。这大大简化了很多逻辑,因为你总是可以指望通过参考来比较书籍是有效的。
无论如何,我现在重写这个代码生锈,我遇到了一个问题,关于组织我的数据在内存中。
拥有一个由
作者组成的
库
,这很简单。然而,我如何组织我的书?
在Java中,
库
包含一个哈希映射
,里面有所有的书,这使得在固定时间内找到一本书成为可能。每个作者
都有一个图书列表(按日期排序),可以列出一位作者的所有图书。
然而,除非我弄错了,否则Rust中的
Vec
不能包含对结构的引用。因此,在我看来,似乎不可能让每个作者
都有一个指向图书馆
中书籍的参考向量。
我该怎么做?有没有可能在没有同一本<代码>书的多份副本的情况下保留此结构?我真的很想说
Library。获取图书(id)。设置标题(“新标题”)
,然后在整个程序中更改标题。
考虑到您的代码示例已经具有ID,解决方案可以很简单:
库
将有一个哈希映射或BTree映射,将图书ID
映射到它的图书
BookId
当然,您也可以使用AuthorId
和作者
。
另一种可能性是使用Rc
和Weak
,但是除非仔细管理,否则可能会出现内存泄漏。
本文向大家介绍Rust 结构域,包括了Rust 结构域的使用技巧和注意事项,需要的朋友参考一下 示例 这指定任何给定的实例Struct具有生命周期'a,并且&u32存储在x中的生命周期必须至少为'a。
到目前为止,我们已经讨论了为了实现文件系统而需要存在于硬盘上的数据结构。 在这里,我们将了解要实现文件系统需要存在于内存中的数据结构。 内存数据结构用于文件系统管理以及通过缓存提高性能。 该信息在安装时间加载并在弹出时丢弃。 1. 内存安装表 内存中安装表包含正在安装到系统的所有设备的列表。 每当连接维护到设备时,其输入将在安装表中完成。 2. 内存目录结构缓存 这是CPU最近访问的目录列表。列表
有多种磁盘数据结构用于实现文件系统。 该结构可能会因操作系统而异。 1. 引导控制块 启动控制块包含从该卷启动操作系统所需的所有信息。 它在UNIX文件系统中被称为引导块。 在NTFS中,它被称为分区引导扇区。 2. 卷控制块 卷控制会阻止有关该音量的所有信息,如块的数量,每个块的大小,分区表,指向空闲块和空闲FCB块的指针。 在UNIX文件系统中,它被称为超级块。 在NTFS中,此信息存储在主文
本文向大家介绍数据结构中的R *树,包括了数据结构中的R *树的使用技巧和注意事项,需要的朋友参考一下 基本概念 在数据处理的情况下,R *树被定义为为索引空间信息而实现的R树的变体。 R *树比标准R树的建造成本稍高,因为可能需要重新插入数据。但是生成的树通常具有更好的查询性能。与标准R树相同,它可以存储点和空间数据。R *树的概念由Norbert Beckmann,Hans-Peter Kri
世间任何文档,都是相似的 如何描述一个文档 抽象的看,任何一个文档都可以下列结构来描述 文档级属性 { # ZDocMetas 标题 作者 子标题 创建日期 指定样式表 … } 标题 # ZDocNode.depth=0 … 一块内容 … # ZDocN
这是一个面试问题。设计一个类,它存储整数并提供两个操作: 我想我可以使用BST,以便取O(logN)和取O(logN)(对于我应该添加每个节点的左/右子节点的数量)。 现在我想知道这是否是最有效的解决方案,没有更好的解决方案。