- - PR -
一番下のアイテムを削除できるStackクラス
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-07 15:56
エディターツールを作成していまして、
そのツールにアンドゥ、リドゥ機能を実装しています。 実装方法としては、Mementoパターンで、オブジェクトの状態をスタックしています。 スタックには、System.Collections.Generic.Stackクラスを使用しています。 機能は実装できたのですが、アンドゥ用のスタックで大量のメモリを消費しているため、 アンドゥで保持できるスタックの容量を制限したいと考えています。 動きとしては、アンドゥのためのアイテムのスタック個数がしきい値を超えたら、 一番古いアイテムを削除し、新しいアイテムをプッシュして、しきい値を超えないような動きを考えています。 ところが、Stackクラスでは、一番下のアイテムを削除する操作がありませんし(スタックなので当たり前ですが)、スタック容量も自動拡張してしまいます。 このようなアンドゥ、リドゥ機能を実現するための、Stackクラスを自前で作成すればよい話なのですが、みなさんはどのように実現しているのでしょうか? | ||||
|
投稿日時: 2008-05-07 16:54
実際にこれを使って実装してみたことがあるわけではないですが、 System.Collections.Generic.LinkedListを使ってはどうでしょうか。 ヘルプを見る限りでは、 RemoveFirst AddLast Count あたりを使えば簡単に制御ができそうです。 | ||||
|
投稿日時: 2008-05-07 21:44
System.Collections.Generic.Stack は使った経験がなく C# も良く知らないのですが、他の言語(Java)を使ってアンドゥ・リドゥの機能は作った経験はある者です。 あまり Stack を使う必然性はないと思います。普通に List を使ってやれば良いのではないでしょうか。Stack というものは誤操作をしないように縛りを付けただけのものなので、そういう縛りはないよりはあったほうが良いのでしょうけど、かといって大したものでもないし、プログラミングのミスはほかでもすることはありますので、Stack だから便利ということもないと思います。 | ||||
|
投稿日時: 2008-05-08 09:18
みなさん。おはようございます。
返信ありがとうございます。
確かに、スタックという機能が、私が考えている機能の実現の足かせになっているのかもしれません。 Stackクラスを採用した理由は、アンドゥならスタックだろうという私の勝手な思いこみからなので、そのほかのコレクションクラスを使うなどして、対応してみたいと思います。 私のプログラミングポリシーとして、自前で作るよりは、出来合のものを使ってしまえなもので・・・(不精者です) ちゃんと調べないとダメですね ありがとうございました。 [ メッセージ編集済み 編集者: からあげ 編集日時 2008-05-08 09:24 ] |
1