寻找具有持久性顺序索引的数据结构

时间:2012-10-23 12:55:14

标签: c# .net data-structures

我正在寻找一种基本上像这样工作的数据结构:

  • 结构是一个有序的值序列。
  • 每个插入的值声明一个索引,该索引大于上一个索引,不会被重用并且不会移位(它是持久)。
  • 可以在一次操作中从结构中删除特定索引之前的所有项目。
  • 所有仍然活着的项目都可以通过索引访问。
  • 可以批量检索两个索引之间的所有项目。 (如果在添加新项目时可以检索它们,那也很棒。)

以上是我最好的实施猜测。我真正想要的属性是能够拥有一个消费者,它可以保留一种书签价值,并且可以在不丢失的情况下读取新项目,并且能够在某个时间戳之前清除项目。但是,数据结构不需要知道时间戳;能够在特定索引之前删除所有内容。

我实现这种结构的方法是保持项目计数开始的位置的int,然后直接保留项目列表或列表段列表。索引是某种原始整数将包装,但不在程序生命的实际时间跨度的几倍内。

我所知道的最接近的结构是来自the LMAX Disruptor的特定环形缓冲区。但是,如果消费者太落后而不适合我的目的,那么这种结构也会受阻。消费者是面向批处理的,可能不会频繁占用CPU时间; Disruptor最适用于持续针对环形缓冲区的专用逻辑任务。

所以我问的问题是:

  • 这是否有名字?
  • 是否有针对C#或其他语言的实现?
  • 我的用例有更好的选择吗?

1 个答案:

答案 0 :(得分:1)

不知道任何类似的预设集合,但您可以创建自定义集合对象,扩展System.Collections.CollectionBase。

public class MyCollection : CollectionBase
{
    public MyCollection() { }

此集合基础对象包含一个List属性,您可以以任何方式公开它,例如,添加Add()方法

public int Add(Object o) // could by anything
{
    return List.Add(o);
}

你可以有一个返回新集合的GetRange(int start,int length),就像你填充返回集合一样,从基础集合中删除