C#ではキューコレクションを使用します。私は簡単にエンキューまたはデキューできます。さて、私はキューの途中またはキューの始めに何かを挿入したいと思います。私はそのようなことをする方法を見つけることはありません。代替コレクションとして何をお勧めしますか?C#のキューに要素を挿入する方法
答えて
キューは、定義によって、キューに格納されているものとキューから取り出されたものだけです。真ん中に挿入する場合は、Queue
ではなく、本格的なリスト(おそらくLinkedList<T>
)が必要です。
つまり、あなたはスーパーマーケットの待ち行列の真ん中に自分自身を挿入しようとしません(私が望む)。ここでも同じように動作します。
おそらくリストを使用する必要があります。
あなたが探しているものはLinkedList<T>
です。最初、中間(AddBeforeまたはAddAfterを使用)、またはリストの末尾に追加することができます。
これは、List<T>
を使用した場合よりも優れています。これは、RemoveFirstまたはRemoveLastを使用してキューまたはスタックをより正確に模倣できるためです。
キューのポイントは、FIFO(ファーストインファーストアウト)インターフェイス抽象化を提供することです。非キュー方式でデータ構造とやり取りできるようにするには、キューを使用しないでください。
キューの中にアイテムを追加することができます(オーバーヘッドのビットを使用して)キュー以外のものを使用できない場所にいる場合は、このページの回答は正しいですが、それが行われるべきかどうかは、別の話です。
var myQueue = new Queue<string>();
myQueue.Enqueue("item 0");
myQueue.Enqueue("item 10");
var myList = myQueue.ToList();
myList.Insert(1, "item 5");
myQueue = new Queue<string>(myList);
便利なテクニック。新しい 'Queue'を作成しているので、古いキューを参照している人は誰もあなたの挿入を見ることができません!古いキューが「参照」で渡され、他の誰も古いキューへの参照を「参照していない」場合、時にはOKです。後者の要件は問題です。使用しているクラスを変更できない場合は、新しいオブジェクトを作成することが許可されていない可能性があります。そのような場合は、すべてのアイテムを一時リストにデキューし、挿入してから再びエンキューする必要があります。 – ToolmakerSteve
キューの中央に挿入する場合は、「優先キュー」を探している可能性があります。
残念ながら、これは組込みの.NetクラスAFAIKではありません。しかし、少なくとも今あなたはコンセプト名を持っています。
いくつかの可能性が便利なリンクについては、この(クローズ)Q & Aを参照してください:
が質問からの引用 Priority queue in .Net
:
プライオリティキューは、簡単なソートよりも高い柔軟性を提供するデータ構造ですそれらは新しい要素が任意の間隔でシステムに入ることを可能にするからです。このような到着ごとにすべてを再ソートするよりも、優先順位の高いキューに新しいジョブを挿入するほうがはるかにコスト効率に優れています。
- 挿入(Q、X):
基本的なプライオリティキュー
は、3つの主要操作をサポートしています。アイテムxにキーkが与えられている場合、それを優先キューQに挿入する。- Find-Minimum(Q)。項目 へのポインタを返します。キー値は、優先度キュー Q.
- の削除最小(Q)の他のどのキーよりも小さくなります。キーが最小である優先キューQから項目を削除する
- 1. CのFIFOキューの要素にIDを与える方法は?
- 2. TinyXML2/C++ - 要素を挿入する
- 3. 合成マウスイベントをX11入力キューに挿入する方法
- 4. Javaのカスタム配列リストに要素を挿入する方法
- 5. イテレータ位置の後に要素を挿入する方法
- 6. 複数の要素を配列に挿入する方法
- 7. jQueryで要素の前にチェックボックスを挿入する方法
- 8. 要素を破ることによるテキストの挿入方法?
- 9. 子要素をリストビューに挿入する方法は?
- 10. ブラウザにXML要素を挿入する方法DOM
- 11. Prolog - リストに要素を挿入する方法
- 12. ベクトルへの要素の挿入に関するC++の質問
- 13. doctrineリスナーに要素を挿入する
- 14. コレクションにテーブル要素を挿入する
- 15. ストリームに要素を挿入する
- 16. 複数のxml要素をCで挿入する
- 17. キューに挿入するモードのパターン
- 18. 挿入親要素のID
- 19. ListIteratorを使用してLinkedListの途中に要素を挿入する方法
- 20. jquery内の他の要素の中に最初の子として要素を挿入する方法
- 21. 配列要素が挿入されている場合にのみ配列要素をプッシュする方法
- 22. STLコンテナ挿入要素
- 23. シンプルなHTML Dom Parser:要素への挿入方法
- 24. C++で接続するSQLに配列要素を挿入するには?
- 25. C#を使用して配列の要素をSQL Serverデータベースに挿入する方法は?
- 26. 最後の特定のノード/要素の後にXML要素を挿入する
- 27. 動的に挿入された要素に動的に要素を挿入する方法はありますか?
- 28. Jqueryのクローニング、挿入された要素の挿入と操作
- 29. すべての 'X'リアクションコンポーネントの後に要素を挿入する
- 30. 複数の要素にキューに入れられたアニメーション
...私に言ってもらえませんか?あなたは、スーパーマーケットで真ん中に列を入れようとしている人の一人ですか? :)私のポイントは、キューの全体のポイントは、アイテムが一方の端にそれを入力し、別の端に残すことです。ここでは、キューから出て行く人々がどのように実装できるかを理解するために、読者のためのエクササイズとして残しておきます:) –