- PR -

ArrayList.IndexOfの使用方法について

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-14 08:23
ToString"も"、オーバーライドすれば?

 ToStringは、「そのオブジェクトを表す文字列」を返すので、オブジェクトが2つのフィールドによって表されるなら、2つのフィールドを文字列としてマージした値を返すように実装すればよい、と思うのです。



>今現在はその様な力もないのが現状でして、
>それはもう少しレベルアップしたときのお楽しみとして取っておこうと思います。

 遠慮しなくても、今レベルアップしちゃえばいいんですよ。日進月歩のこの業界、遠慮なんかしてたらまた新しいのにかわっちゃいますって。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-14 08:27 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-10-14 09:57
引用:

Jittaさんの書き込み (2003-10-14 08:23) より:
ToString"も"、オーバーライドすれば?

 ToStringは、「そのオブジェクトを表す文字列」を返すので、オブジェクトが2つのフィールドによって表されるなら、2つのフィールドを文字列としてマージした値を返すように実装すればよい、と思うのです。


これ、何に対する(何を目的としている)話でしょか?

クラスの実装でToStringをオーバーライドするのはまあ、出来るだけ行うべきではあると思いますが、それは今回のこととは別次元の話でしょうし…
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-10-14 11:14
引用:

なちゃさんの書き込み (2003-10-14 09:57) より:

これ、何に対する(何を目的としている)話でしょか?

クラスの実装でToStringをオーバーライドするのはまあ、出来るだけ行うべきではあると思いますが、それは今回のこととは別次元の話でしょうし…


ToStringを、
return _field & "::" & _text
とでも定義し、Equalsで、
return (Arg2.ToString = Arg1.ToString)
のような感じでいけません??
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-10-14 11:29
unibon です。こんにちわ。

#VB.NET は知らないのですが、
#この辺はおそらく Java と類似しているだろうと仮定して書きます。
#あまり直接の回答ではないのかもしれませんが。

引用:

アキミさんの書き込み (2003-10-11 21:50) より:
このRecord(ArrayList)に対して、「Textが"ShopName"というTableFieldのインデックスを取得する」という方法でindexOfを使用したいのですが、その方法がわかりません。
テストとしてRecord.indexOf(new TableField("ShopName","7-11"))という方法をしてみても「-1」が入ってきてしまいます。


Field と Text の意味合いによっても多少変わってくるかもしれませんが、
Equals メソッドはクラスに対してひとつしか定義できないので、
あくまでもそのクラスにとって自然な Equals の定義としておくほうが良いと思います。
これは、すなわち今回のような indexOf による検索(Text を見て、Field を無視する)、
は、特殊な用途であり、
そのために Equals の定義が左右されるのは因果関係が逆だという考えです。

ちなみに Java だと、
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Collections.html#binarySearch(java.util.List,%20java.lang.Object,%20java.util.Comparator)
などがあり、バイナリサーチなら Comparator が使え、
それはひとつに限らず、検索の場面に応じて好きなだけ複数個定義できますので、
本来はこれがバイナリサーチ以外でも使えたほうが良いと考えます。
(たとえばメソッド linearSearch(List, Comparator) があっても良い。)

たぶん、.NET にもないのではと予想するのですが、
もし、なにかを定義するとしたら Equals をオーバライドするのではなく、
Comparator を新たに定義したほうがキレイだと思います。
この場合は、この Comparator を使った linearSearch(や indexOf) メソッド相当のものも、
自分で作ってしまうことになります。
ただし、Comparator だと(要求上は要らない)大小関係まで定義しないといけないので、
本来は Comparator のようにクラスの外側で Equals が定義できると良いのかもしれません。
#でも、フレームワークが複雑になってしまう?

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