- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一个 CircularBuffer IDictionary。谁能给我指出一个好的开源实现。
因此 IDictionary 具有最大容量,比如配置为 100 个项目,当添加项目 101 时,原始的第一个项目将从字典中弹出/删除,从而确保项目计数永远不会超过 100。
谢谢
最佳答案
要保持 O(1) 插入(删除超过 100 的最旧项目)和 O(1) 查找,您需要一个实现 IDictionary 的类并且保持内部有序列表。如果内存更受关注,BST 实现如 SortedList
可能更合适。无论如何,您的类(class)将同时包含 T[]
和一个 Dictionary<T,K>
(或 SortedList<T,K>
)。做你自己的循环缓冲区索引(简单),并在添加、删除等方法中保持两个集合的当前状态。你将拥有:
使其通用并实现IDictionary<T,K>
和 IDictionary
因为没有理由不这样做,您将获得性能优势。
一个主要考虑因素:您如何处理重复键?我假设您实际上不能保留重复项,所以:
Count
字典,然后使用 this[key]
插入键索引器。如果大小增加,则检查列表是否已经具有最大容量,从列表和字典中删除前面的项目并将新项目添加到后面。如果字典的大小没有增加,则将该项目从其在列表中的现有位置移动到列表的后面。最后,请注意内部列表保留键,而不是值。这是为了确保在超过列表容量时 O(1) 出队。
关于c# - C# 中的 CircularBuffer IDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1239858/
我需要一个 CircularBuffer IDictionary。谁能给我指出一个好的开源实现。 因此 IDictionary 具有最大容量,比如配置为 100 个项目,当添加项目 101 时,原始的
这是一个一般性问题,我是 C++ 的新手,我正在玩一个项目,该项目以 1 毫秒的间隔从工作线程中的串行/USB 端口读取数据到循环缓冲区中,我有另一个 GUI UI 线程每 100 毫秒抓取一次数据。
我是一名优秀的程序员,十分优秀!