我有一个自定义类叫card
,我需要从一个随机大小的卡片阵列中创建一组10个独特的卡片。另外,我需要首先包含任何已列入白名单的卡片,以确保它们始终包含在内。NSMutableSet包含重复
我的问题是来自白名单(只有白名单)的卡片可能在该集合中被复制。随机添加的卡片从不复制,并且计数总是正确的(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]]];
}
我推翻了我的card
类isEqual
方法基于另一个回答过的问题在这里:
- (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副本)。
啊完美,非常感谢。我正在把自己引向错误的道路,因为它有时似乎在工作,而不是其他人。 – hokiewalrus 2012-02-28 19:44:16