【问题标题】:How to modify array of dictionaries?如何修改字典数组?
【发布时间】:2012-02-17 18:30:25
【问题描述】:

我有一个NSArray 和几个NSDictionaries。我想用相同数量的NSDictionaries 创建一个新的NSArray,但我只想要字典中的一些键,而不是所有键。

例子:

数组有 2 个字典。每个字典都有键name, age, address, email, phone

我想要一个新数组,它也有 2 个字典,但只有 name and address 键。

【问题讨论】:

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


    【解决方案1】:

    我会这样做:

    NSMutableArray *replacementArray = [NSMutableArray array];
    
    [existingArray enumerateObjectsUsingBlock:
        ^(NSDictionary *dictionary, NSUInteger idx, BOOL *stop)
        {
             NSDictionary *newDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[dictionary objectForKey:@"name"], @"name", [dictionary objectForKey:@"address"], @"address", nil];
             [replacementArray addObject:newDictionary];
        }
    ];
    

    【讨论】:

    • 错误表示方法调度中缺少语句。
    • 当我第一次发布我的答案时,我在 dictionaryWithObjectsAndKeys: 的参数末尾缺少一个 nil,但我在 30 秒后将其放入。这应该是问题所在,假设您在我修复之前获得了代码。
    • 其实我需要在块中添加这个对吗? dictionary = [aSkus objectAtIndex:idx];
    • 不,在枚举的每次迭代中,字典已经设置为 [aSkus objectAtIndex:idx],所以没有它应该没问题。
    【解决方案2】:

    尝试以下(兼容 iOS 2+):

    NSMutableArray *newArray = [NSMutableArray array];
    for (NSDictionary *origDict in origArray) { // Replace origArray with your array's name
        [newArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:[origDict objectForKey@"name"], @"name", [origDict objectForKey@"address"], @"address", nil]];
    }
    NSArray *newImmutableArray = [newArray copy] // If you want to ensure your array is not mutable
    // ...
    [newImmutableArray release]; // To balance -copy above
    

    【讨论】:

      【解决方案3】:

      试试这个

       for(i=0;i<[firstArray count];i++){
      
       NSArray *objectArray=[NSArray arrayWithObjects:[[firstArray objectAtIndex:i]objectForKey:@"name"],[[firstArray objectAtIndex:i]objectForKey:@"address"]];
      
       NSArray *keyArray=[NSArray arrayWithObjects:@"name",@"address"];
       NSDictionary *myDictionary=[NSDictionary dictionaryWithObjects:objectArray forKeys:keyArray];
      
       [secondArray addObject:myDictionary];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 2011-02-11
        • 2020-11-20
        相关资源
        最近更新 更多