foreach
Queue
ループは、最も古いアイテムから始まり、最も新しいアイテムで終わることを繰り返します。最新のものから始めて、最も古いもので終わる必要がある場合はどうすればよいでしょうか (ほとんどの場合、いくつかの最新のアイテムを繰り返す必要があるため、おそらくある時点で中断します)。
簡単で効率的なソリューションを探しています。新しいオブジェクトを再作成することなく。
foreach
Queue
ループは、最も古いアイテムから始まり、最も新しいアイテムで終わることを繰り返します。最新のものから始めて、最も古いもので終わる必要がある場合はどうすればよいでしょうか (ほとんどの場合、いくつかの最新のアイテムを繰り返す必要があるため、おそらくある時点で中断します)。
簡単で効率的なソリューションを探しています。新しいオブジェクトを再作成することなく。
Linq のReverse()
関数を使用できます。
Queue myQueue;
foreach (var item in myQueue.Reverse())
{
// do things
}
for
ループはあなたの友達です。
あなたには2つのオプションがあります
Queue
for
ループを使用します。for (int i = list.Length; i >= 0; i--) { }
キューの順序を逆にします。
Queue queue;
foreach (var item in queue.Reverse())
{
}
代わりに 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;
}
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キュータイプになります。