Как заполнить NSMutable массив NSMutableSets? - PullRequest
0 голосов
/ 03 апреля 2012

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

    // 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 после этого.Почему?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Попробуйте, это выглядит очень похоже на вашу логику, но (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];
}

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

1 голос
/ 03 апреля 2012

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

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