- PR -

一番下のアイテムを削除できるStackクラス

1
投稿者投稿内容
からあげ
会議室デビュー日: 2007/12/13
投稿数: 19
投稿日時: 2008-05-07 15:56
エディターツールを作成していまして、
そのツールにアンドゥ、リドゥ機能を実装しています。

実装方法としては、Mementoパターンで、オブジェクトの状態をスタックしています。
スタックには、System.Collections.Generic.Stackクラスを使用しています。

機能は実装できたのですが、アンドゥ用のスタックで大量のメモリを消費しているため、
アンドゥで保持できるスタックの容量を制限したいと考えています。

動きとしては、アンドゥのためのアイテムのスタック個数がしきい値を超えたら、
一番古いアイテムを削除し、新しいアイテムをプッシュして、しきい値を超えないような動きを考えています。

ところが、Stackクラスでは、一番下のアイテムを削除する操作がありませんし(スタックなので当たり前ですが)、スタック容量も自動拡張してしまいます。

このようなアンドゥ、リドゥ機能を実現するための、Stackクラスを自前で作成すればよい話なのですが、みなさんはどのように実現しているのでしょうか?
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-05-07 16:54
引用:

からあげさんの書き込み (2008-05-07 15:56) より:
動きとしては、アンドゥのためのアイテムのスタック個数がしきい値を超えたら、
一番古いアイテムを削除し、新しいアイテムをプッシュして、しきい値を超えないような動きを考えています。



実際にこれを使って実装してみたことがあるわけではないですが、
System.Collections.Generic.LinkedListを使ってはどうでしょうか。

ヘルプを見る限りでは、
RemoveFirst
AddLast
Count
あたりを使えば簡単に制御ができそうです。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-05-07 21:44
引用:

からあげさんの書き込み (2008-05-07 15:56) より:
このようなアンドゥ、リドゥ機能を実現するための、Stackクラスを自前で作成すればよい話なのですが、みなさんはどのように実現しているのでしょうか?


System.Collections.Generic.Stack は使った経験がなく C# も良く知らないのですが、他の言語(Java)を使ってアンドゥ・リドゥの機能は作った経験はある者です。

あまり Stack を使う必然性はないと思います。普通に List を使ってやれば良いのではないでしょうか。Stack というものは誤操作をしないように縛りを付けただけのものなので、そういう縛りはないよりはあったほうが良いのでしょうけど、かといって大したものでもないし、プログラミングのミスはほかでもすることはありますので、Stack だから便利ということもないと思います。
からあげ
会議室デビュー日: 2007/12/13
投稿数: 19
投稿日時: 2008-05-08 09:18
みなさん。おはようございます。

返信ありがとうございます。

引用:
unibonさんの書き込み (2008-05-07 21:44) より:
Stack というものは誤操作をしないように縛りを付けただけのものなので



確かに、スタックという機能が、私が考えている機能の実現の足かせになっているのかもしれません。

Stackクラスを採用した理由は、アンドゥならスタックだろうという私の勝手な思いこみからなので、そのほかのコレクションクラスを使うなどして、対応してみたいと思います。

私のプログラミングポリシーとして、自前で作るよりは、出来合のものを使ってしまえなもので・・・(不精者です)
ちゃんと調べないとダメですね

ありがとうございました。


[ メッセージ編集済み 編集者: からあげ 編集日時 2008-05-08 09:24 ]
1

スキルアップ/キャリアアップ(JOB@IT)