要素の削除も可能なスタック構造が必要です。私は.Netフレームワークでこのようなものを見つけることができません。どの構造が私にこれを実装するための最良の基礎を提供していますか?C#削除可能要素を持つスタック
答えて
私はAddFirst(Push)とRemoveFirst(Pop)のメソッドを持っているので、LinkedListを使用します。しかし、それはまた、真ん中で削除するために使用できる単純なRemoveメソッドを持っています。
ありがとう、これは完璧です。 –
System.Collections.Generic.List<T>
又は
System.Collections.Generic.LinkedList<T>
状況に応じ。
まあ、どのようなリストのような構造体もスタックとして使用できます。あなたはちょうどプッシュし、最後から項目をポップします。
スタックの途中でアイテムを削除する必要がある場合は、組み込みのジェネリックListのRemoveAt()を使用できます。
LinkedList<T>
?あなたはStack<T>
としてそれを扱うためにあなた自身を包んでいなければならないでしょう。もちろん、あなただけList<T>
を使用することができます - しかし、あなたは途中からの削除のコストを吸収する必要があると思います...のような
何か:あなたが必要とする他のどんな方法/同期/などと
using System;
using System.Collections.Generic;
class MyStack<T> {
private readonly LinkedList<T> list = new LinkedList<T>();
public void Push(T value) {
list.AddLast(value);
}
public int Count { get { return list.Count; } }
public T Pop() {
LinkedListNode<T> node = list.Last;
if(node == null) throw new InvalidOperationException();
list.RemoveLast();
return node.Value;
}
public bool Remove(T item) {
return list.Remove(item);
}
}
。
とdownvoteのため... –
要素を削除すると、スタックの一番上にないアイテムを削除することを意味しますか?
あなたができることの1つは、リストを使用して、拡張メソッドを使用してスタックのような動作を実装することです(メモ帳でコード化されています)。あなたは、その後も、リストが空の場合はnullを返すか、例外をスローするようにしたいかもしれない(特別な処理を行うことができ、多分あなたは、私が使用
public static void Push<T>(this IList<T> list, T item)
{
list.InsertAt(0, item);
}
public static T Pop<T>(this IList<T> list)
{
if(list.Count > 0)
{
T value = list[0];
list.RemoveAt(0);
return value;
}
// handle error
}
リストの* end *からadd-to/remove-betterを使う方がいいでしょう。そうしないと、あなたが何かをするたびにたくさんのコピーを... –
あなたのリストをもっとコントロールする必要があるならば、私は@Marcの答えに行きます。単純なことをやって、私のような機能を使うようなスタックが必要です。何かを覚えておくことは、あなたのリストに対してlinqサポートが必要な場合は、IEnumerableを実装することです。 –
私はアプローチに同意していません - 単にリストの方向性... "0"の終わりですべての仕事にはるかに高価です... –
- 1. ドラッグ可能なクローン可能なDIV要素を削除するためのボタン
- 2. RxSwift - 使用可能な要素を削除してみる
- 3. 削除可能なdiv /要素を作成する
- 4. jQueryUI:ドラッグ可能な要素を適切に削除する
- 5. 削除後のソート可能な要素の滞在
- 6. Angular2のフィルタを持つリストの要素を削除する
- 7. 等しい要素を持つセル配列を削除する
- 8. 特定の名前を持つリスト要素を削除する
- 9. XSLTで特定のテキストを持つサブ要素を持つ要素を削除するには
- 10. 削除要素
- 11. サイズ変更可能な要素を持つサイズ変更可能なjQuery UIウィジェット
- 12. スタック可能なメニューのすぐ隣に要素を配置
- 13. クリック可能な要素を持つAndroidのインデックス付きリスト
- 14. jsPlumbのコネクタを持つドラッグ可能な要素
- 15. C++ 98、vector、最初の要素を除くすべての要素を削除
- 16. 可変幅要素を持つjqueryスライダー
- 17. 共有ポインタのC++スタックの削除
- 18. mongooseを持つNode.jsは1つの配列要素を削除します
- 19. Lisp、2つの共通要素を持つサブリストを削除する
- 20. 要素が同じテキストを持っている場合、2つの要素の1つを削除します。
- 21. 自己削除可能な要素を作成していますか?
- 22. 2つの可能なインデックスを持つセット内の要素を格納する
- 23. JQueryで要素を削除
- 24. 要素のスタック
- 25. 要素が削除可能か、ドラッグ可能か、その他の「ble」かどうかをチェックする方法は?
- 26. 削除条件が他の要素に依存するC++ベクタから要素を削除する
- 27. 各ループのC++ 11でstd :: listの要素を削除することは可能ですか?
- 28. トグル効果を持つ要素を追加して削除する
- 29. 入れ子のベクトルでremove_ifを持つ要素を削除する
- 30. OBJECTIVE-C intの配列を持つスタック
など、項目がリストされていないことを確認しますJavaとC#/ VB.Netの両方が働いていて、Java Stackコレクション*にはremove(Object)メソッドがあります(Collectionインターフェイスではそうです)。 – Powerlord