2009-08-20 3 views
7

私は、コレクションのサイズを指定し、新しい値が追加されるたびに、この指定されたサイズを超える古い値は削除された値のローリングコレクションを持っているとします。キュー明らかに、この動作のために使用するコレクションの最適なタイプを(と私はこれをテストしてみた)です:キュー内の最初と最後のアイテムをどのように取得しますか?

myQueue.Enqueue(newValue) 
If myQueue.Count > specifiedSize Then myQueue.Dequeue() 

しかし、私は、キュー内の最初と最後の項目間の差を計算したい場合は何?明らかに私は索引で項目にアクセスできません。しかし、QueueからIListを実装するものに切り替えることは、新しいQueueのようなクラスを書くのと同様に、過剰なもののように思えます。今私が持っている:ToArray()に呼び出す

Dim firstValue As Integer = myQueue.Peek() 
Dim lastValue As Integer = myQueue.ToArray()(myQueue.Count - 1) 
Dim diff As Integer = lastValue - firstValue 

が私を悩ますが、優れた選択肢は私に来ていません。助言がありますか?

+0

C#にデキュー型がありませんか? –

+0

いいえ、C#には型がありません.Netには型があります。 .Netにはデキュー型がありません。デキュー型のキュー/キューがあります。 –

答えて

14

あなたができることの1つは、それが最後の値になるためにエンキューされた値を格納する一時変数を持つことで、その値を取得するために変数にアクセスできるからです。

+0

あなたがこの答えを出したのとほぼ同じ時間に、私は解決策(あなたが提案したもの、基本的に)がどれほど単純かを理解しました。よかった! –

+0

ありがとうございます。私は良い提案をすることができてうれしいです。 – murgatroid99

2

Queueに追加された最後の値を把握し、myQueue.Peek()機能を使用して、リスト内の「最初の」(次の意味)項目を削除せずに確認してください。

1

あなた両端キュー(D ouble- 電子 nded キュー)を使用することができます。

System.Collections(.Generic)に組み込まれているものはありませんが、ここではデータ構造に関する情報があります。このようなものを実装した場合、PeekLeft()とPeekRight()を使って最初と最後の値を取得できます。

もちろん、ToArray()のunsexinessを処理するよりも独自のdequeを実装する方が望ましいかどうかはあなた次第です。 :)

http://www.codeproject.com/KB/recipes/deque.aspx

10

あなたは、あなたが間違ったデータ構造を使用している、リストの最初の項目にすばやくアクセスする必要がある場合は、私には思えます。 LinkedListを代わりに切り替えます。これは便利なFirstとLastプロパティを持っています。

キュープロパティを維持するために、AddLastとRemoveFirstを使用してアイテムをリンクリストに追加したり削除したりしてください。不注意にQueueプロパティに違反しないようにするには、リンクされたリストの周りにラッパークラスを作成し、必要なプロパティのみをキューから公開することを検討してください。

+0

残念ながら、データ構造自体の外側に最後に追加されたものを追跡するよりも優れています。 –

4
public class LastQ<T> : Queue<T> 
{ 
    public T Last { get; private set; } 

    public new void Enqueue(T item) 
    { 
     Last = item; 
     base.Enqueue(item); 
    } 
} 

編集: 明らかに、この基本的なクラスが空のキューの最後の財産を保護するようなことを行うために、より堅牢でなければなりません。しかし、これは基本的な考え方には十分であるはずです。

+0

ハ!これは私が書いたコードのほぼVERBATIMです。(違いはクラス名で、base.Enqueue(item)の後にLast = itemを置く)。 –

+0

最後の要素が削除されたらどうなりますか?最後の2番目の要素に 'Last'をどのように設定しますか? – nawfal

関連する問題