动感中串计数的NSMutableDictionary

问题描述:

我所熟悉的从已知的阵列动感中串计数的NSMutableDictionary

int numberOfWords = [self.wordArray count]; 

得到一个字符串计数,但我有一个未知数量的阵列,全部由字典引用一个未知数量的字符串。这工作 - 很好。

NSMutableDictionary *eqClasses = [[NSMutableDictionary alloc] init]; 

的数组和字符串在运行时添加(与此板的帮助):

  NSMutableArray* array = [eqClasses objectForKey:wordPattern]; 
      if(!array) { 
       // create new array and add to dictionary if wordPattern not found 
       array = [NSMutableArray array]; 
       [eqClasses setObject:array forKey:wordPattern]; 
      } 
      [array addObject:tempWordStr]; 

现在我需要通过字典来迭代,并获得与最大字数阵列。有没有一种方法来滚动字典中的所有数组而不使用键(我不会知道所有的字模式,因为它们是动态生成的),并且一旦我找到数组中最多的单词,获取该数组/值和键/词模式?

那么,有一种方式来获得一本字典中的所有键:

NSArray *keyArray = [myDict allKeys]; 

然后你只是去通过阵列,并得到每个键的对象。 快速枚举应该很好地工作。

for (NSString *string in NSArray){ 
    ... 
} //Assuming your keys are strings! 

您可以将每个字符串保存到一个临时字符串,并在遇到新字符串时比较以找到较长的字符串。如果时间更长,请用较长的字符串替换旧字符串。

希望这有助于!^_^

+0

的allKeys不会返回我需要什么 - 谢谢。但是对于客观的C来说我是新手,所以我在你描述的下一部分遇到了麻烦。我需要使用密钥来检查上述字典。你可能已经解释了,但更多的片段将不胜感激。 – user1278974 2012-04-18 18:47:25

+0

这是坏的语法,但像我想与上面的示例代码结合:int numberOfWords = [eqClasses objectForKey:string count]; – user1278974 2012-04-18 18:51:18

+0

看看我的第二个答案是否有意义:) – wayway 2012-04-18 18:55:45

^_^ 好吧,现在你已经有了一个包含字典中所有键的数组, 你可以遍历整个数组并获取每个键的相应值(字符串)。

NSArray *keyArray = [myDict allKeys]; //This gets all the keys 
NSString *tempString = @""; //This is the string you will save the longest string in. It gets updated when a longer string is found in the following loop. 

for (NSString *string in keyArray){ 
    NSString *stringFromCurrentKey = [myDict objectForKey:string]; 
    if(stringFromCurrentKey.length > tempString.length){ 
     tempString = stringFromCurrentKey; 
    } 
} //By the end, you should be left with the longest string contained in tempString! 

^_ ^希望这有道理和帮助!

试试这个代码:

NSArray *largestArray = nil; 

for (NSString *key in dictionary) 
{ 
    NSArray *array = [dictionary objectForKey:key]; 
    if (array.count > largestArray.count) // largestArray.count is 0 if largestArray is nil 
    { 
     largestArray = array; 
    } 
} 
+0

**编辑:**修正了在快速枚举期间NSDictionary返回键的事实。 – 2012-04-18 19:12:56