私はスタックが一番簡単な方法だと知っていますが、何もデキューすることなくキューの最後の要素を取得することは可能でしょうか?キュー内の最後の要素を取得する方法はありますか?
答えて
あなたは使用することができますLINQの(myQueue
があなたのキューの名前です)Enumerable.Last()
method:
var lastElement = myQueue.Last();
他の人が言及したようにあなた自身が、多くの場合、これを実行する必要が見つけた場合、あなたはおそらく使用して考えるようにしたいが、異なるデータ構造。たとえば、List<T>
:
var myElement = myList[myList.Length - 1];
はありません、あなたはこれを行うために(ToList
またはToArray
を使用して)他のいくつかのコレクションにキューを変換する必要があります。これにより、キュー内のすべてを効率的にデキューします。
キューから最後のアイテムを必要とすることで、誤ったコレクションを使用してデータを保持していることが実証されています。コレクションを必要なすべての操作を提供する別のタイプに変更することを検討してください。
キューはその操作を高速にするように設定されていないため、できることはO(n)です。あなたはSystem.Linqのをインポートする場合
、あなたが書くことができます。 myQueue.Last()
をあなたは、単に行うことができます。
// Assumes T is a reference type, if it's a value type, then
// you will get an instance with the bits zeroed out.
T item = queue.LastOrDefault();
ここでの問題は、すべての時間はあなたがキュー内の最後の項目を取得したいということですキュー内のすべてのアイテムをまで繰り返す必要があります。
キューの最初と最後の要素にアクセスすることが重要な場合は、double-ended queueと考えてください。
あなたが本当にあなたに必要がある場合は、これを使用するが、異なるデータ構造を使用することを検討することができます
public static class QueueExtensions<T>
{
const BindingFlags _flags =
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance;
private static readonly FieldInfo _array =
typeof(Queue<T>).GetField("_array", _flags);
private static readonly FieldInfo _size =
typeof(Queue<T>).GetField("_size", _flags);
public T LastItem(this Queue<T> value)
{
if (value == null)
throw new ArgumentNullException("value");
if (value.Count == 0)
throw new ArgumentException("The queue cannot be empty.", "value");
var array = (T[])_array.GetValue(value);
var size = (int)_size.GetValue(value);
return array[size - 1];
}
}
-1、申し訳ありませんが、私はこのような内部実装の詳細を頼りにすることはできません。それはあまりにも脆いです。 IMOの方が良い選択肢は、ダブルエンドアクセスを可能にする異なる構造( 'List
@casperOne - 私が私の答えで述べたように。 – ChaosPandion
それは動作しません。 Resharperまたは同様に 'Queue
- 1. キュー内の最大要素を取得する| Java
- 2. graphqlで最後の3要素を取得する方法
- 3. Javaキューは、forループ内の最後の要素のみを出力します。
- 4. Haskellでリストの最後の要素を取得する最速の方法
- 5. 配列の最後の要素の値を取得する方法は?
- 6. ActiveMQのキュー長を取得する簡単な方法はありますか?
- 7. SQSキューのAverage Service Timeを取得する方法はありますか?
- 8. multi_index_containerから最後の2番目の要素を取得する方法
- 9. 配列から最後のn個の要素を取得する方法
- 10. Apache Artemisを使用したJMSキュー、キュー内の最後のメッセージを取得する方法
- 11. XPathでシーケンスの最後の要素を取得する方法は?
- 12. 最新のイベントの要素を取得する方法(null値をフィルタリングする必要があります)
- 13. SortedDictionaryの最後の要素を取得
- 14. Xpathで要素属性名を取得する方法はありますか?
- 15. 属性で要素を取得する方法はありますか?
- 16. 変換後の要素のプロパティを取得する方法は?
- 17. XPATHに最大の子を持つ要素を取得する方法はありますか?
- 18. C++にランダムアクセスのリスト内の要素を取得する方法はありますか?
- 19. Anyから最初の要素を取得する方法
- 20. リストから最後の要素のみを取得する
- 21. 1つの要素内の要素からデータを取得する方法 - Javascript
- 22. リスト内の要素の位置を取得する方法は?
- 23. コンテナ内の要素の型を取得する方法は?
- 24. 最大優先度キューから最小要素を取得する
- 25. data.frameの要素の最初と最後の出現を見つける方法はありますか?
- 26. ミンクセレクタ:内容の基に要素を取得する方法はありますか?
- 27. djangoテンプレートフィルタchaning - 最後の要素の最後の要素を取得
- 28. CSSの最後の要素を取得するには?
- 29. ベクトル内の各実行の最後の要素のインデックスを取得します
- 30. パーシャルビューから_Layoutページ内の要素を取得する方法
はなぜだけでなく、スタックを維持していませんか? – Kakira
[キュー内の最初と最後のアイテムをどのように取得するのですか?](http://stackoverflow.com/questions/1308186/how-would-you-obtain-the-first-and-last-items- in-a-queue) – nawfal