私はcard
というカスタムクラスを持っています。ランダムなサイズのカードの配列から10個のユニークなカードのセットを作成する必要があります。また、常にホワイトリストに記載されたカードを含めて、それらが常に含まれていることを確認する必要があります。NSMutableSetには重複が含まれています
私の問題は、ホワイトリストのカード(そしてホワイトリストのみ)がセットに潜在的に複製されていることです。ランダムに追加されたカードは決して複製されず、カウントは常に正しい(10)。 isEqual
が時々動作するように見える理由はわかりませんが、必ずしもそうではありません。
NSMutableSet *randomCards = [NSMutableSet setWithCapacity:10];
[randomCards addObjectsFromArray:whiteListArray];
while ([randomCards count] < 10) {
NSNumber *randomNumber = [NSNumber numberWithInt:(arc4random() % [randoms count])];
[randomCards addObject:[randoms objectAtIndex:[randomNumber intValue]]];
}
は、私は別の質問への答えに基づいて、私の
card
クラスの
isEqual
メソッドをオーバーライド:
私は(
randoms
から選ばれる可能性のカードの配列である)セットを作成するのはここ
です
- (BOOL)isEqual:(id)other {
if (other == self)
return YES;
if (!other || ![other isKindOfClass:[self class]])
return NO;
return [self isEqualToCard:other];
}
- (BOOL)isEqualToCard:(Card *)myCard {
if (self == myCard) {
return YES;
}
if ([self cardName] != [myCard cardName] && ![(id)[self cardName] isEqual:[myCard cardName]])
return NO;
return YES;
}
ホワイトリストカードに追加する場合を除いて、完全に動作するように見えますが、私はどのように複製されてしまっているのか分かりません。
Ah完璧、ありがとう。私は間違った道のりで自分自身を導いていました。なぜなら、ときどき働くように思えたからです。 – hokiewalrus