У меня есть пользовательский класс, называемый 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]]];
}
Я отменяю метод 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 копий).
Ah отлично, спасибо. Я вел себя по неправильному пути, потому что это работало иногда, а не другие. – hokiewalrus