3

foreachQueueループは、最も古いアイテムから始まり、最も新しいアイテムで終わることを繰り返します。最新のものから始めて、最も古いもので終わる必要がある場合はどうすればよいでしょうか (ほとんどの場合、いくつかの最新のアイテムを繰り返す必要があるため、おそらくある時点で中断します)。

簡単で効率的なソリューションを探しています。新しいオブジェクトを再作成することなく。

4

5 に答える 5

6

Linq のReverse()関数を使用できます。

Queue myQueue;

foreach (var item in myQueue.Reverse())
{
    // do things
}
于 2012-11-08T09:19:55.083 に答える
1

forループはあなたの友達です。

あなたには2つのオプションがあります

  • の順序を逆にするQueue
  • forループを使用します。
for (int i = list.Length; i >= 0; i--)
{

}

キューの順序を逆にします。

Queue queue;

foreach (var item in queue.Reverse())
{

}
于 2012-11-08T09:18:00.760 に答える
0

代わりに for ループを使用してください。

編集:ループ内でアイテムを取得する方法の例を追加しました。

編集:例をaに変更しましたQueueが、これが使用するよりも高価であるかどうかを確認しないとわかりませんQueueList.Reverse()

逆行する

for (int i = QueueList.Count; i >= 0; i--)
{
   var Item = QueueList.ToArray().ToList()[i] as SomeObject;
}

普通

for (int i = 0; i < QueueList.Count; i++)
{
   var Item = QueueList.ToArray().ToList()[i] as SomeObject;
}
于 2012-11-08T09:18:30.710 に答える
0
var newestItems = queue.Reverse().TakeWhile(item => IsNewest(item));
// if condition is simple, you can use lambda without creating named method

以降:

foreach(var item in newestItems)
    // do stuff

読み取り可能ですが、高価です。この場合 ( を使用する場合Reverse)、Linq はキューのすべての項目をバッファーにコピーします。

ところで、キューの順序を逆にする必要がある場合は、Stack代わりに使用することを検討してください。FILOキュータイプになります。

于 2012-11-08T09:20:52.260 に答える