我在循环中使用此代码来填充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。为什么呢?
答案 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];
}
如果在运行此字典后仍然有一个空字典,通过逐步查看发生的情况可能会更简单。