Cocoa类通过单个键引用许多条目

时间:2014-05-21 18:15:26

标签: cocoa-touch cocoa data-structures mapping

我需要一个Cocoa数据结构来保存一段时间内一组昆虫的位置列表。显然,NSDictionary必须有唯一的密钥,因此我无法将昆虫用作密钥,MKUserlocation作为对象。

NSArray之外是否还有其他课程,其中一个人无需逐步完成,if / else - 在每个索引处?

在各种各样的地方似乎都有NSList这样的事情,但Apple文档中没有任何内容。

我还看到NSIndexSetNSArray一起使用的引用,但再次阅读Apple文档表明它对我没用。

2 个答案:

答案 0 :(得分:4)

由于Cocoa框架不提供multimap容器,您可以通过创建NSMutableDictionary并使用NSMutableArray对象填充它来实现自己的容器。

NSMutableDictionary locByInsect = [NSMutableDictionary dictionary];

// Adding a location for an insect:

MyInsect *insect = ... // Don't forget to provide hash code and equality checks
MyLocation *location = ...
NSMutableDictionary *insectLocations = locByInsect[insect];
if (insectLocations == nil) {
    insectLocations = [NSMutableArray array];
    locByInsect[insect] = insectLocations;
}
[insectLocations addObject:location];

// Retrieving all locations for an insect
for (MyLocation *loc in locByInsect[insect]) {
    NSLog(@"Saw %@ at %@", insect, loc);
}

答案 1 :(得分:2)

每只昆虫都有NSMutableDictionary的钥匙。将每个密钥的对象设为NSMutableArray个位置。