- - PR -
ArrayList.IndexOfの使用方法について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-14 08:23
ToString"も"、オーバーライドすれば?
ToStringは、「そのオブジェクトを表す文字列」を返すので、オブジェクトが2つのフィールドによって表されるなら、2つのフィールドを文字列としてマージした値を返すように実装すればよい、と思うのです。 >今現在はその様な力もないのが現状でして、 >それはもう少しレベルアップしたときのお楽しみとして取っておこうと思います。 遠慮しなくても、今レベルアップしちゃえばいいんですよ。日進月歩のこの業界、遠慮なんかしてたらまた新しいのにかわっちゃいますって。 [ メッセージ編集済み 編集者: Jitta 編集日時 2003-10-14 08:27 ] | ||||
|
投稿日時: 2003-10-14 09:57
これ、何に対する(何を目的としている)話でしょか? クラスの実装でToStringをオーバーライドするのはまあ、出来るだけ行うべきではあると思いますが、それは今回のこととは別次元の話でしょうし… | ||||
|
投稿日時: 2003-10-14 11:14
ToStringを、 return _field & "::" & _text とでも定義し、Equalsで、 return (Arg2.ToString = Arg1.ToString) のような感じでいけません?? | ||||
|
投稿日時: 2003-10-14 11:29
unibon です。こんにちわ。
#VB.NET は知らないのですが、 #この辺はおそらく Java と類似しているだろうと仮定して書きます。 #あまり直接の回答ではないのかもしれませんが。
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 が定義できると良いのかもしれません。 #でも、フレームワークが複雑になってしまう? |