【问题标题】:What's the standard convention for creating a new NSArray from an existing NSArray?从现有 NSArray 创建新 NSArray 的标准约定是什么?
【发布时间】:2010-11-04 19:20:36
【问题描述】:

假设我有一个 NSDictionaries 中的 NSArray,它有 10 个元素长。我想用每个字典上单个键的值创建第二个NSArray。我能想到的最好方法是:

    NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:[array count]];
    for (NSDictionary *p in array) {
        [nameArray addObject:[p objectForKey:@"name"]];
    }
    self.my_new_array = array;
    [array release];
    [nameArray release];
}

但从理论上讲,我应该能够不使用可变数组并使用与[nameArray addObjectAtIndex:count] 结合使用的计数器,因为新列表应该与旧列表一样长。请注意,我不是要过滤原始数组的子集,而是创建一个具有完全相同数量元素的新数组,只是从数组中每个元素的某个任意属性中挖掘出的值。

在python中可以这样解决这个问题:

new_list = [p['name'] for p in old_list]

或者如果你是一个受虐狂,像这样:

new_list = map(lambda p: p['name'], old_list)

在 Objective-c 中必须稍微更明确一点,这让我想知道是否有一种公认的通用方法来处理这些情况。

【问题讨论】:

    标签: ios objective-c xcode cocoa cocoa-touch


    【解决方案1】:

    在这种特殊情况下,Cocoa 在简洁性方面也不甘示弱 :)

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

    来自 NSArray 文档:

    valueForKey:

    返回一个包含 调用 valueForKey 的结果:使用 键在每个接收者的对象上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多