【发布时间】:2012-07-02 20:09:48
【问题描述】:
我在一组类别中有一堆对象。我想知道每个类别有多少。
在另一种语言中,我会创建一个字典,然后迭代对象,为每个对象递增字典中的适当值。但是,因为我不能在 Objective-C 中的 NSDictionary 中存储本机数字类型,这让我不断在 NSNumber 和数字类型之间来回转换:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
for (MyObject *obj in objs) {
NSNumber *old = [dictionary objectForKey:obj.category];
NSNumber *new = [NSNumber numberWithInteger:1 + old.integerValue];
[dictionary setObject:new forKey:obj.category];
}
有没有更有效的方法来做到这一点?
【问题讨论】:
-
你能把数组
obis按类别排序吗? -
您是否对此进行了分析并发现它是一个重大瓶颈?特别是考虑到具有小整数值的
NSNumbers被缓存(并且可能在某些平台上被实现为标记指针),在优化这样的东西之前确实需要有基准和目标。 -
对不起@vikingosegundo,我不是指Objective-C意义上的“类别”。它只是一些任意值,例如“物种”或“颜色”。你说得对,我应该用一个不同的词。
-
@warrenm:我并不担心它会成为一个瓶颈,我真的只是希望有人有一个很棒的 Objective-C 习语来处理这个问题,因为像这样计算似乎在我的代码中出现了很多。
-
令人敬畏的 Objective-C 习惯用法是使用 NSNumber。因为它几乎从来都不是瓶颈,所以没有理由不这样做。除了冗长,ObjC 通常并不担心(尽管 Apple 不断添加新功能以消除其中一些问题)。
标签: objective-c algorithm dictionary