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