1

(この場合はNSMutableDictionaryAクラス)のキーとして作成したカスタムクラスを使用する必要があります。Socket

JavaでHashMapまたはを使用する場合TreeMap、辞書が動作するには、オブジェクトにハッシュ関数またはコンパレータ関数がそれぞれ必要です。一般に、辞書はキーを比較するための何らかの方法を知る必要があります。

私がドキュメントで読んだことから、私が使用するためにこれをしなければならないようには見えませんNSMutableDictionary。あれは正しいですか?もしそうなら、誰かがキー比較をどのように実装したか知っていますか?

4

2 に答える 2

4

-hashのデフォルトの実装はオブジェクトのインスタンスアドレスに基づいているため、NSDictionaryでキーとして使用するのは不適切なオプションである可能性があります。したがって、デフォルトでは、ロジックを反映するように-isEqualと-hashの両方を適切にオーバーライドするまで、クラスの2つの論理的に等しいインスタンスがディクショナリの2つの異なるエントリにマップされます。

それとは別に、NSDictionaryはキーをコピーするため、等式ロジックを反映するために-copyWithZone:を適切にオーバーライドする必要があります。

于 2012-07-12T18:34:49.673 に答える
3

キーが準拠している限りNSCopying(準拠してNSObjectいませんが、多くのことが準拠しています)、キーとして使用できます。キーはを使用してコピーされcopyWithZone:ます。

これがどのように機能するかについては、Javaでメモしたとおりに機能します。「このオブジェクトは、辞書が機能するために、それぞれハッシュ関数またはコンパレータ関数のいずれかを必要とします。」すべてがとの両方をNSObject実装します。hashisEqual:

于 2012-07-12T18:29:34.887 に答える