【问题标题】:Convert NSMutableArray to NSDictionary in order to use objectForKey?将 NSMutableArray 转换为 NSDictionary 以使用 objectForKey?
【发布时间】:2012-02-03 21:06:54
【问题描述】:

我有一个看起来像这样的 NSMutableArray

 {
    "@active" = false;
    "@name" = NAME1;
 },
 {
    "@active" = false;
    "@name" = NAME2;
 }

有没有办法将其转换为 NSDictionary,然后使用 objectForKey 来获取名称对象的数组?我还能如何获得这些对象?

【问题讨论】:

    标签: iphone objective-c cocoa-touch nsarray nsdictionary


    【解决方案1】:

    有一个比休伯特提出的更短的形式

    NSArray *allNames = [array valueForKey:@"name"];
    

    valueForKey: on NSArray 通过向所有 it 元素发送 valueForKey:givenKey 返回一个新数组。

    来自docs

    valueForKey:
    返回一个包含调用结果的数组 valueForKey: 对数组的每个对象使用 key

    - (id)valueForKey:(NSString *)key

    参数
    key 要检索的密钥。

    返回值
    检索到的键的值。

    讨论
    返回的数组包含每个返回 nil 的对象的 NSNull 元素。

    例子:

    NSArray *array = @[@{ @"active": @NO,@"name": @"Alice"},
                       @{ @"active": @NO,@"name": @"Bob"}];
    
    NSLog(@"%@\n%@", array, [array valueForKey:@"name"]);
    

    结果:

    (
            {
            active = 0;
            name = Alice;
        },
            {
            active = 0;
            name = Bob;
        }
    )
    (
        Alice,
        Bob
    )
    

    【讨论】:

      【解决方案2】:

      如果你想将 NSMutableArray 转换为对应的 NSDictionary,只需简单地使用 mutableCopy

      NSMutableArray *phone_list; //your Array
      NSDictionary *dictionary = [[NSDictionary alloc] init];
      dictionary = [phone_list mutableCopy];
      

      【讨论】:

      • 迄今为止最好的解决方案
      • 这...不起作用。您的dictionary 变量实际上是一个数组。
      【解决方案3】:

      这是一个字典对象数组,因此要获取值,您可以:

      [[myArray objectAtIndex:0]valueForKey:@"name"]; //Replace index with the index you want and/or the key.
      

      【讨论】:

      • 我假设你的意思是 valueForKey:@"@name",但我试过了,它抛出了 NSUnknownKeyException。我从一个 nsdictionary 制作了这个数组,因此它可能不会设置为“字典对象数组”,我认为我没有任何其他选择。见here
      • 我想通了并将其设置为 NSDictionary 而不是 NSArray。谢谢
      • 还有更短的形式,看我的回答。
      【解决方案4】:

      这是获取员工列表 NSMutableArray 并创建 NSMutableDictionary 的示例之一......

      NSMutableArray *emloyees = [[NSMutableArray alloc]initWithObjects:@"saman",@"Ruchira",@"Rukshan",@"ishan",@"Harsha",@"Ghihan",@"Lakmali",@"Dasuni", nil];
      
      NSMutableDictionary *dict = [NSMutableDictionary dictionary];
      for (NSString *word in emloyees) {
          NSString *firstLetter = [[word substringToIndex:1] uppercaseString];
          letterList  = [dict objectForKey:firstLetter];
      
          if (!letterList) {
              letterList = [NSMutableArray array];
              [dict setObject:letterList forKey:firstLetter];
          }
          [letterList addObject:word];
      }   NSLog(@"dic %@",dict);
      

      【讨论】:

        【解决方案5】:

        是的,你可以

        看这个例子:

        NSDictionary *responseDictionary = [[request responseString] JSONValue];
        NSMutableArray *dict = [responseDictionary objectForKey:@"data"];
        NSDictionary *entry = [dict objectAtIndex:0];
        NSString *num = [entry objectForKey:@"num"]; 
        NSString *name = [entry objectForKey:@"name"];
        NSString *score = [entry objectForKey:@"score"];
        

        对不起,如果我不能详细说明,因为我也在做一些事情

        但我希望这可以帮助你。 :)

        【讨论】:

        • @Davis G. - 我猜 Hubert 的答案更简单易用。
        • @vikingosegundo - 先生嗨.. 你能帮我解决一下 cocos2d 我有问题吗我有问题禁止这就是为什么我不能发布问题我真的需要帮助吗?
        • 什么是问题禁令?不,我没有使用 cocos2d 的经验。
        【解决方案6】:

        不,伙计们....问题是您正在踩可可中的 KeyValue 机制。

        KeyValueCoding 指定@count 符号可用于keyPath....

        myArray.@count

        SOOOOOO.... 只需切换到 ObjectForKey 就可以了!

        NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"theValue", @"@name", nil];
        
        id kvoReturnedObject = [myDictionary valueForKey:@"@name"]; //WON'T WORK, the @ symbol is special in the valueForKey
        id dictionaryReturnedObject = [myDictionary objectForKey:@"@name"];
        
        NSLog(@"object = %@", dictionaryReturnedObject);
        

        【讨论】:

          猜你喜欢
          • 2013-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-17
          • 2011-10-24
          • 2010-11-27
          相关资源
          最近更新 更多