3

2 つの NSSet が「等しい」かどうかを判断しようとしていますが、isEqualToSet の意味ではありません。2 つのセットのアイテムは同じクラスですが、同じオブジェクトではなく、同じオブジェクトへの参照でもありません。ただし、同じプロパティが1 つあります。それを「name」と呼びましょう。

これら 2 つのセットを比較して単純なセット カウント テストを行い、次に、より複雑な objectsPassingTest: 1 つのセットの各アイテムに対して、同じ名前のアイテムが他のセットにあることを確認するのが私の最善の策ですか? このケースを処理するためのより簡単な方法が存在することを願っています。

4

3 に答える 3

3

私は同じ問題を抱えていましたが、同時に複数のプロパティを比較する必要がありました (クラスUserとプロパティNameおよびId )。

クラスに必要なプロパティを持つNSDictionaryを返すメソッドを追加することで、これを解決しました。

- (NSDictionary *)itemProperties
{
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:self.name forKey:@"name"];
    [dict setObject:self.id forKey:@"id"];
    return dict;
}

そして、valueForKey:Kevin Ballardが述べたように使用します:

BOOL userSetsEqual = [[userSet1 valueForKey:@"itemProperties"]
    isEqualToSet:[userSet2 valueForKey:@"itemProperties"]];

... userSet1 と userSet2 は、Userオブジェクトを含む NSSet です。

于 2013-03-15T12:28:15.423 に答える
2

両方のセットを呼び出すだけvalueForKey:で、結果を比較できます。

if ([[set1 valueForKey:@"name"] isEqualToSet:[set2 valueForKey:@"name"]]) {
    // the sets match your criteria
}
于 2010-11-07T04:19:51.123 に答える
0

ドキュメントを見ると、この特殊なケースを実際に処理する方法はないようです。これを処理するには、いくつかのカスタム コードを作成する必要があります。個人的には-sortedArrayUsingDescriptors:、配列を使用してから比較することをお勧めしますが、それは私だけです。1 つのセットを列挙してから、 を使用して他のセットを絞り込み、-filteredSetUsingPredicate:その を取得することもできますcount

どちらの方法を使用しても、おそらく非常に効率的ではないという事実を考慮してください. これは避けられないかもしれませんが、他の方法よりも優れた方法がおそらくあります。思考の糧。

于 2010-11-07T03:56:07.987 に答える