2013-09-09 3 views
1

Я хочу инициализировать NSArray с заданными числами нулей. Мне нужно создать массив счетчиков, а в конце функции вернуть индекс счетчика с наивысшим значением.Создание NSArray повторных чисел

Итак, вопрос в том, как инициализировать NSArray нулей заданной длины? Есть ли хороший способ сделать это в 1-2 строках? Может быть, есть лучший способ подсчета объектов? Как бы вы это сделали?

Спасибо!

UPD: Вот код моей существующей функции. Он возвращает максимальное количество карт, имеющих одинаковый ранг.

+ (int)ranksMatched:(NSArray *)cards 
{ 
    NSMutableArray *ranksCounter = [[NSMutableArray alloc] initWithCapacity:[PlayingCard maxRank]]; 
    for (int i = 0; i < [PlayingCard maxRank]; ++i) { 
     [ranksCounter addObject:[NSNumber numberWithInt:0]]; 
    } 
    int maxIndex = 0; 
    int maxCount = 0; 
    for (PlayingCard *card in cards) { 
     int currentCount = [ranksCounter[card.rank] intValue] + 1; 
     if (maxCount < currentCount) { 
      maxCount = currentCount; 
      maxIndex = card.rank; 
     } 
    } 
    return maxCount; 
} 
+1

Вы рассматривали использование 'NSCountedSet'? – rmaddy

+0

Это так же просто, как 'NSMutableArray * array = [NSMutableArray array]; for (int i = 0; i Chuck

+0

@ Чак, да, конечно! Я обновил свой вопрос. – DaZzz

ответ

1

Я предполагаю, что вы хотите группы, карты от ранга и вернуть звание самой большой группы:

+ (int)ranksMatched:(NSArray *)cards 
{ 
    NSCountedSet *ranks = [NSCountedSet setWithArray:[cards valueForKeyPath:@"rank"]]; 

    NSNumber *maxRank = nil; 
    NSUInteger maxCount = 0; 

    for (NSNumber *rank in ranks) { 
     NSUInteger rankCount = [ranks countForObject:rank]; 
     if (rankCount > maxCount) { 
      maxRank = rank; 
      maxCount = rankCount; 
     } 
    } 

    return [maxRank intValue]; 
} 

если у вас есть

@interface PlayingCard : NSObject 

@property (nonatomic, assign) int rank; 

… 

@end 

И cards является массивом PlayingCard ,

+0

Удивительный! Только то, что мне нужно. Я был уверен, что есть какой-то хитрый код. :) – DaZzz

+0

Не могли бы вы объяснить, что делает '[cards valueForKeyPath: @" rank "]' do? Я никогда не видел эту конструкцию раньше ... – DaZzz

+0

Для '@ [hearts9, spades2, spades9, clubs7, hearts7]' он вернет '@ [9, 2, 9, 7, 7]'. Правильно ли это? – DaZzz

Смежные вопросы