【问题标题】:Dynamica string count in NSMutableArray in NSMutableDictionaryNSMutableDictionary 中 NSMutableArray 中的 Dynamica 字符串计数
【发布时间】:2012-04-18 18:15:14
【问题描述】:

我熟悉从已知数组中获取字符串计数

    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];

现在我需要遍历字典并获取具有最大字数的数组。有没有办法在不使用键的情况下滚动字典中的所有数组(我不会知道所有的单词模式,因为它们是动态生成的),并且一旦我找到单词最多的数组,就得到那个数组/值和关键字/单词模式?

【问题讨论】:

    标签: ios nsmutabledictionary nsmutablestring


    【解决方案1】:

    嗯,有一种方法可以获取字典中的所有键:

    NSArray *keyArray = [myDict allKeys];
    

    然后您只需遍历数组并获取每个键的对象。 快速枚举应该可以很好地工作。

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

    您可以将每个字符串保存为一个临时字符串,当遇到新字符串时,比较查找较长的字符串。如果较长,请将旧字符串替换为较长的字符串。

    希望这有帮助! ^_^

    【讨论】:

    • allKeys 确实返回了我需要的东西 - 谢谢。但是我是目标 C 的新手,所以我在你描述的下一部分遇到了麻烦。我需要使用这些键来浏览上述字典。您可能已经解释过了,但更多的 sn-p 将不胜感激。
    • 这是一种不好的语法,但我正在尝试结合上面的示例代码:int numberOfWords = [eqClasses objectForKey:string count];
    • 看看我的第二个答案是否有意义:)
    【解决方案2】:

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

    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!
    

    ^_^ 希望这有意义并有所帮助!

    【讨论】:

      【解决方案3】:

      试试这个代码:

      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;
          }
      }
      

      【讨论】:

      • 编辑: 修复了 NSDictionary 在快速枚举期间返回键的事实。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2014-04-13
      • 1970-01-01
      相关资源
      最近更新 更多