2

がありNSArray、各アイテムがNSDictionarykeyA、keyB、および keyC の 3 つのキーを持ち、それぞれが不明なタイプのオブジェクトを参照しているとします(id)

これらの 3 つのキーを持つ特定の要素を見つけるメソッドを書きたい場合、つまり

-(NSDictionary *) itemThatContainsKeys:(id)objectA and:(id)objectB and:(id)objectC

if([i objectForKey:(keyA) isEqualTo:objectA]) などを介してオブジェクトの等価性を単に列挙してテストするだけで問題が発生するでしょうか? ディクショナリの初期化で設定された実際のオブジェクトを渡します。つまり、値が同じで場所が異なる文字列ではありません。

これは悪い習慣ですか?データベースを作成せずにこれを行うより良い方法はありますか?

4

2 に答える 2

0

isEqual: メソッドは、サブクラスによって上書きされない限り、オブジェクトの同一性を比較します。ターゲットがどのクラスであるかに応じて、これが必要な場合とそうでない場合があります。私が好むのは、 isEqualToNumber: のようなよりクラス固有の比較を使用することです。単に明示性があるためです。ただし、ターゲットによっては isEqual が機能するはずです。

それ以外に、あなたが何をしているかの詳細がわからないので、あなたが求めていることを達成するためのより良い方法があるかどうかを言うのは難しいです. しかし、ここに私の考えがあります。

ディクショナリの配列は、アプリ内の構成を表すカスタム クラスが必要なように思えます。おそらく、辞書は isEqualToAnotherThing: メソッドを実装するカスタム オブジェクトに置き換えることができます。これにより、ロジックが簡素化されます。

于 2013-10-06T15:11:42.013 に答える