- - PR -
For Each で呼び出せるクラスを作りたいです
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-01 19:00
情報の取捨選択をしましょう。 とりあえず、今のあなたに必要なのは、列挙の方法だけですよね。私は、あなたのその要望に沿う情報だけ、並べています。なので、あなた(の今の目的)にとってはわかりやすいのです。しかし、「検索の速さ」や「使用メモリ量」という情報を求める人には、「なんの情報もない」ことになります。 蒸し返すようで申し訳ないですが、、、 単に CollectionBase や ReadOnlyCollectionBase から継承して、
でもよさげ。Hashtable を使う必要があるのか、ってところが問題。 または、「番号」を持たせていて、結局「Add した順」ではなく、この「番号順」に取り出したいわけなんだから、SortedList を使って、
とか。番号の順にソートされるので、配列の添え字と"番号 - 1"が一緒になる。 まぁ、GetEnumerator で取り出されるのが IDictionaryEnumerator なので、ちょっと処理が必要になるけど。 ___________________________________________________________________ □ written by Jitta on 2005/12/01 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ | ||||||||||||
|
投稿日時: 2005-12-01 20:03
そうですね。おかげさまで、少しずつ読めるようになってきますた。 いろいろとサンプルコードをありがとうございました。 適材適所で使い分けると効率の良いコードが書けますね。 | ||||||||||||
|
投稿日時: 2005-12-01 21:41
そうなんですよね。意外と難しい。 Hashtable を使う必要があるのかといわれれば、よくわからない。 でも使うデメリットはもっと思い浮かばない。 とりあえずStringなどはGetHashCodeを標準装備なのでKeyとしてOKOK Keyがカスタムクラスの場合はGetHashCodeを実装しなければNG。 (私のケースはこっち) それで、実際に速度とメモリー消費量を調べなくてはと思っていたところでした。 でも意外とこれがめんどくさい。 Hashtable を使うほどのサンプルデータを作成する手段が思いつかず 実データでやるのは情報交換の価値は少ない気もするし。 別件がたくさんあるので、とりあえず可もなく不可もなく動いているものに手を入れるのもためらわれ とりあえずGetHashCodeを実装したところで、ペンディングとなっております。 そうとう大きいコレクションとかKeyアクセスが激しい(OnPaintなどで呼ばれまくるとかの)ケースでないと差は出ないように思えますが かといってデメリットもまた思い浮かばない。 とはいえ、お好みでどうぞというのも、いまひとつすっきりしない。 ベンチマークの情報でもさがしてみようかな? ちょっと脱線気味で申し訳ありません。 とても奥の深い話題で、投稿者様には感謝しています。 | ||||||||||||
|
投稿日時: 2005-12-01 22:21
いえ、okok ではないです、たぶん。 問題は、「ハッシュ値」を算出するための「キー」を、「頭文字」としているところです。「人名」とか「商品名」だと思いますが、たとえば、、、 あい あかね あずさ あき あきこ あおい を格納しようとすると、「キー」がすべて「あ」になります。同じキーから導き出されるハッシュ値は同じでしょうから、衝突が多発することとなり、これではハッシュテーブルを使う意味がない、と思います。 どんなデータを納めるのか書いていなかったので消したのですが、やっぱり気になりました(^^ゞ ___________________________________________________________________ □ written by Jitta on 2005/12/01 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ | ||||||||||||
|
投稿日時: 2005-12-01 22:35
あ、これは、私も気になっていたのですが、そもそも頭文字がキーになるわけはなく ArrayListであっても同じことなので 多分適当な例が思い浮かばなかったんだろうなくらいに思っていました。 汎用的な事例を考えるのって結構難しいですよね。 でも、そういうことが結構勉強になったりしますし、抽象化能力の訓練になるのかもしれません。 ひとりで悩んでいると、ちょっとした盲点に嵌り込んだりすますし 掲示板でいろいろな視点からのご意見を伺うと大変参考になります。 あらら、また脱線してしまいました。失礼しました。 |