我正在为 AI 代理实现一个内存系统。它需要有一个状态转换的内部列表,该列表的上限为某个数字,比如 10000。
如果容量已满,添加新内存应该会自动删除最旧的内存。
重要的是,我还需要能够快速访问此列表中的任何项目。
Queue 的包装器起初看起来很明显,但 Queue 不允许快速访问任何元素。 (O(n))
类似地,从 List 结构的开头删除一个项目需要 O(n)。
LinkedLists 允许快速添加和删除,但同样不允许快速访问每个索引。
数组允许随机访问,但显然它不能动态调整大小并且删除是有问题的。
我看到有人建议使用 HashMap,但我确定如何实现。
建议?
最佳答案
如果你希望队列的长度固定,你可以使用 circular buffer它启用 O(1) 入队、出队和索引操作,并在队列已满时自动覆盖旧条目。
关于C# 数据结构,可以动态调整大小到给定限制的列表,并允许快速访问任何索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38499882/