2012-04-03 6 views
0

Я использую этот код в цикле, чтобы заполнить NSMutable Array из NSMutableSets (объектов NSString). Индекс NSSet основан на длине слова.Как заполнять NSMutable массив NSMutableSets?

// if set of this length not initialized yet, initialize set. 
    wordIndex = [NSString stringWithFormat:@"%d", currentWordLength]; 
    if ([myWordArray objectForKey:wordIndex] == nil) 
     [myWordArray setObject:[[NSMutableSet alloc] initWithObjects:currentWord, nil] forKey:wordIndex]; 
    else 
     [[myWordArray objectForKey:wordIndex] addObject:currentWord]; 

Окончательное намерение состоит в том, чтобы разбить массив слов на массив наборов слов, сгруппированных по их длинам.

Однако, я вижу, что [myWordArray count] - это 0 после этого. Зачем?

+0

Вы вызываете переменную myWordArray, но вы рассматриваете ее как словарь? Кроме того, вы его инициализируете? –

ответ

1

Вы вводите в заблуждение методы NSMutableDictionary и NSMutableArray: в массивах Objective-C нет ключей, но есть индексы. Если вы измените класс на myWordArray на NSMutableDicitionary, он должен работать.

+0

Спасибо. В таком случае, каков правильный способ извлечения элемента из NSMutableArray? –

+0

'- (id) objectAtIndex: (NSUInteger) index'. Однако это вызовет исключение, если 'index> = [array count]'. Подробнее см. Https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/cl/NSArray. –

1

Попробуйте это, он очень похож на вашу логику, но (1) он использует NSNumbers в качестве клавиш, что имеет немного больше смысла, (2) проще обрабатывать отсутствующее состояние набора, но просто добавляет набор и (3) распадается на исходные линии несколько для облегчения отладки ...

NSArray *inputStrings = // however these are initialized goes here 
NSMutableDictionary *result = [NSMutableDictionary dictionary]; 

for (NSString *currentString in inputStrings) { 
    NSInteger currentWordLength = currentString.length; 
    wordIndex = [NSNumber numberWithInt:currentWordLength]; 
    NSMutableSet *wordSet = [result objectForKey:wordIndex]; 
    if (!wordSet) { 
     wordSet = [NSMutableSet set]; 
     [result setObject:wordSet forKey:wordIndex]; 
    } 
    [wordSet addObject:currentWord]; 
} 

Если вы до сих пор пустой словарь после запуска этого, это может быть проще, чтобы посмотреть, что происходит, ступая через него.

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