1

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

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

以上是我最好的实现猜测。我真正想要的属性是能够拥有一个保存某种书签值并且可以读取新项目而不会错过的消费者,并且能够在某个时间戳之前清除项目。但是,数据结构不需要知道时间戳;能够在特定索引之前删除所有内容就可以了。

我将实现此结构的方式是保留项目计数开始位置的 int,然后直接保留项目列表或列表段列表。作为某种原始整数的索引将换行,但不会在程序生命周期的实际时间跨度的几倍内。

我所知道的最接近的结构是来自LMAX Disruptor的特定环形缓冲区。但是,如果消费者落后太远,这种结构也会阻塞,这不符合我的目的。消费者是面向批处理的,可能得不到频繁的 CPU 时间;Disruptor 在专门的逻辑任务上工作得最好,专门的逻辑任务不断地在环形缓冲区上工作。

所以我要问的问题是:

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

1 回答 1

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),就像您填充返回集合一样,从基本集合中删除

于 2012-10-23T13:05:27.567 回答