动感中串计数的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!
您可以将每个字符串保存到一个临时字符串,并在遇到新字符串时比较以找到较长的字符串。如果时间更长,请用较长的字符串替换旧字符串。
希望这有助于!^_^
答
^_^ 好吧,现在你已经有了一个包含字典中所有键的数组, 你可以遍历整个数组并获取每个键的相应值(字符串)。
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
的allKeys不会返回我需要什么 - 谢谢。但是对于客观的C来说我是新手,所以我在你描述的下一部分遇到了麻烦。我需要使用密钥来检查上述字典。你可能已经解释了,但更多的片段将不胜感激。 – user1278974 2012-04-18 18:47:25
这是坏的语法,但像我想与上面的示例代码结合:int numberOfWords = [eqClasses objectForKey:string count]; – user1278974 2012-04-18 18:51:18
看看我的第二个答案是否有意义:) – wayway 2012-04-18 18:55:45