1

私はSilverlight3.0でアプリケーションを作成しています。そのアプリケーションでは、次のような機能を実装したいと考えています。値のコレクションを維持する必要があります。そのコレクションの一方の端から値を継続的に追加し、もう一方の端から値を削除しています。つまり、3000個の値のコレクションを維持したいとします。そのコレクションに1つの値を追加する場合は、1つの値を削除して、3000個の値のコレクションのみを取得する必要があります。「循環キュー」を使用したいので、循環キューのSilverlightに機能はありますか?または、循環キューの代わりに効率的なロジックはありますか?助けてください。よろしくお願いします。

4

2 に答える 2

1

組み込みクラスを使用して、その周りにラッパーQueueを実装することをお勧めします。

public class CircularQueue
{
  private int totalItems;
  private Queue<object> queue = new Queue<object>();

  public CircularQueue(int maxCount)
  {
    this.totalItems = maxCount;
  }

  /// <summary>
  /// Get first object from queue.
  /// </summary>
  public object Dequeue()
  {
    // ToDo: You might want to check first if the queue is empty to avoid a InvalidOperationException
    object firstObject = this.queue.Dequeue();
    return firstObject;
  }

  public void EnQueue(object objectToPutIntoQueue)
  {
    if (this.queue.Count >= this.totalItems)
    {
      object unusedObject = this.queue.Dequeue();

      // ToDo: Cleanup the instance of ununsedObject.
    }

    this.queue.Enqueue(objectToPutIntoQueue);
  }
}
于 2012-06-21T14:32:24.890 に答える
1

「循環キュー」という特定の用語に精通していませんが、独自のキューを簡単に作成できます。

public class CircularQuene<T> : List<T>
{
    public CircularQuene(int maxCount)
    {
        count = maxCount;
    }

    new public void Add(T variable)
    {
        base.Add(variable);
        if (Count > count)
        {
            RemoveAt(0);
        }
    }

    private int count;
    public int MaxCount
    {
        get
        {
            return count;
        }
        set
        {
            count = value;
        }
    }
}

少しラフですが、ニーズに合うはずです。

于 2012-06-21T14:25:31.040 に答える