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. スタック内のキューの要素を挿入するjava
- 2. CのFIFOキューの要素にIDを与える方法は?
- 3. TinyXML2/C++ - 要素を挿入する
- 4. 合成マウスイベントをX11入力キューに挿入する方法
- 5. xsltの指定された要素に要素を挿入する方法は?
- 6. この構造体に要素を挿入する方法
- 7. イテレータ位置の後に要素を挿入する方法
- 8. 複数の要素を配列に挿入する方法
- 9. jQueryで要素の前にチェックボックスを挿入する方法
- 10. Javaのカスタム配列リストに要素を挿入する方法
- 11. 最後にリンクリストに要素を挿入する方法
- 12. <img>要素を<a>要素に挿入する方法
- 13. 要素を破ることによるテキストの挿入方法?
- 14. Prolog - リストに要素を挿入する方法
- 15. フォーム要素(Drupal 8)をテーブルに挿入する方法は?
- 16. 要素を文字列配列に挿入する方法は?
- 17. MarkLogic - 要素をXMLに挿入する方法
- 18. 子要素をリストビューに挿入する方法は?
- 19. ブラウザにXML要素を挿入する方法DOM
- 20. 要素を文字列セットのベクトルに挿入するC++
- 21. ベクトルへの要素の挿入に関するC++の質問
- 22. cinを使ってC++でマップに要素を挿入する
- 23. C++で2Dベクトルに要素を挿入する順序
- 24. スクリプト内の要素を要素に挿入する角2
- 25. バイナリツリーに要素を挿入する
- 26. ストリームに要素を挿入する
- 27. doctrineリスナーに要素を挿入する
- 28. リストに要素を挿入する
- 29. コレクションにテーブル要素を挿入する
- 30. ckeditorにHTML要素を挿入する
...私に言ってもらえませんか?あなたは、スーパーマーケットで真ん中に列を入れようとしている人の一人ですか? :)私のポイントは、キューの全体のポイントは、アイテムが一方の端にそれを入力し、別の端に残すことです。ここでは、キューから出て行く人々がどのように実装できるかを理解するために、読者のためのエクササイズとして残しておきます:) –