我有一个名为的自定义类card
,我需要从一组随机大小的卡片中创建一组 10 张唯一卡片。此外,我需要先包含所有列入白名单的卡片,以确保它们始终包含在内。
我的问题是来自白名单(并且只有白名单)的卡片可能在集合中重复。随机添加的卡片永远不会重复,并且计数始终正确(10)。我不明白为什么isEqual
有时似乎有效,但并非总是如此。
这是我创建集合的地方(randoms
是要从中挑选的潜在卡片数组):
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]]];
}
我根据此处回答的另一个问题覆盖了isEqual
我的班级的方法:card
- (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;
}
它似乎工作得很好,除了当我添加白名单卡时,我无法弄清楚我是如何得到重复的(但永远不会超过 2 个副本)。