如何填充NSMutableSet的NSMutablearray?

时间:2012-04-03 01:55:50

标签: objective-c ios

我在循环中使用此代码来填充NSMutableSets(NSString对象)的NSMutable数组。 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 个答案:

答案 0 :(得分:1)

你混淆NSMutableDictionary和NSMutableArray的方法:在Objective-C数组中没有键但有索引。如果您将myWordArray的类更改为NSMutableDicitionary,它应该可以正常工作。

答案 1 :(得分: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];
}

如果在运行此字典后仍然有一个空字典,通过逐步查看发生的情况可能会更简单。