- - PR -
For Each で呼び出せるクラスを作りたいです
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-30 17:55
おお!?
IEnumerable と IEnumerator を一つのクラスで実装するという発想はなかったなぁ。いいのかな。 (この場合は、サンプルのためかコンストラクタで値を設定しているのでまずそうですが) で、ArrayList が何故必要なのかまだ分かりません。 ソースの方も「_配列」 と「_ハッシュ」がごちゃ混ぜになっているようですね。 確認しますが、「列挙したいのはキーではなく値の方」ですよね? ぶっちゃけると
こんな感じいけるはず。 IEnumerator は実装しなくてよろし。 内部は HashTable だけ持っていたらよろし。 _________________ 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2005-11-30 17:56 ] | ||||||||||||||||
|
投稿日時: 2005-11-30 18:00
何も知らず以前の様に Collection クラスを多用していれば幸せだったのでしょう。
しかし、system.collection を知った時点で、これを使わなければ幸せな将来はありえないと思ったのです。 で、遅々なるも「hashtable を for each するには、わざわざ数値でアクセスできるように細工しなければならないのか?」という、あと一歩のところまで辿りついたのです。 絶対なにか良い方法がある筈だと思うのですが、未だにわかりません。 皆さんは、どうされているのでしょう。 それとも、根本的に、僕だけ何か外しているんでしょうか。 | ||||||||||||||||
|
投稿日時: 2005-11-30 18:09
Hashtable.Valuesていってますやん… あと、前にかかれてた(自前の)Enumeratorの実装はちょっとまずいです。 何がまずいって2回foreachしてみれば分かります。 | ||||||||||||||||
|
投稿日時: 2005-11-30 18:25
NAL-6295です。
私は、あるクラス専用のコレクションが欲しい時は、 場合によってCollectionBaseやDictionaryBaseを継承したクラスを作成しています。 | ||||||||||||||||
|
投稿日時: 2005-11-30 18:36
#脱線してしまいますが
VB6の癖が抜けないというのが理由ですが、 先の例はインデックスとキーの双方でアクセスかつForEachがAdd順に列挙できるというものです。 #当然そのような前提を意識してはいけないということはわかっております。 VB.NETに移行する際にSystem.Collectionsではそのような実装ができませんでした。 #実際Add順には列挙されなかった で、先の例にしたらAdd順に列挙されました。 まぁいいやと使っておりましたが、いかんと思いForループに直さねばと思ってるところです。 自己反省も含め書かせていただきました。 | ||||||||||||||||
|
投稿日時: 2005-11-30 18:39
またしても時差でした。 僕が一生懸命レスしていると、その間に、疾風のごとく返答をいただいたりするわけです。そうなると、より一層頭の悪い人に見えてしまうのが辛いところです。 で、この方法で、先ほど試してみたらうまく動きました。囚人さんありがとうございました。 回答がわかると一瞬で、何故こんなことでクヨクヨ悩んでいたんだろうと思います。
IEnumerator でカレント位置を得るために数値でアクセスできる必要があると思っていたからです。 それと、Add の順番を覚えておいて、その順番でアクセスさせたかったというのもあります。(理由としては、こっちの方がメイン) #先ほど気がついたのですが、皆さん引用に特別なことをしているんですね。 #気がつけば僕も常連さんに昇格していることだし、僕もこの方法にしてみることにしました。 | ||||||||||||||||
|
投稿日時: 2005-11-30 18:51
> で、ArrayList が何故必要なのかまだ分かりません。
登録した順序を保持するのに使っているようです。 ハッシュテーブル(連想配列)を使うには?
> 絶対なにか良い方法がある筈だと思うのですが、未だにわかりません。 提示の方法はHashtableとArrayListを上手く使っていると思います。 ただし、Keyによる検索の高速化が重要でなければ、ArrayList2本で十分でしょう。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25965&forum=7 [ メッセージ編集済み 編集者: todo 編集日時 2005-11-30 18:57 ] | ||||||||||||||||
|
投稿日時: 2005-11-30 18:56
僕は、ほんの1時間前まで、保守契約のお客さんのシステムをいぢるのに VB6 のコードを書いていました。 このために、癖が抜けかけると、また元に戻ってしまう毎日です。 まとめて移植しちゃえばいいんでしょうけど、結構な仕事量だし、まだ発売されていない2005で作ったものを納品するのもちょっと勇気が必要です。
そうなんです。僕の中では、これが普通だと思っていたのです。
どうしてですか? そのくらい自分で調べろと言われちゃいますね。すみません。 他にも、同じようなクラスがたくさんあって、変更しなければならないので、その時に使ってみます。
ありがとうございました。少し自信がつきました。 |