当前位置:  开发笔记 > IOS > 正文

从现有NSArray创建新NSArray的标准惯例是什么?

如何解决《从现有NSArray创建新NSArray的标准惯例是什么?》经验,为你挑选了1个好方法。

比方说,我有一个NSArrayNSDictionaries是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中必须稍微明确一点,这让我想知道是否有一种公认的处理这些情况的常用方法.



1> monowerker..:

在这个特殊情况下,Cocoa在简洁中不甘示弱:)

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

从NSArray文档:

valueForKey:

返回一个数组,其中包含调用valueForKey的结果:在每个接收者的对象上使用键.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有