我没有实现我自己的,我想知道是否有人知道我可以使用的 Objective-C 中的直方图或包数据结构实现。
本质上,直方图是列表的哈希图,其中列表包含与其哈希条目相关的值。一个很好的例子是超市物品的直方图,您可以将每组奶制品、肉类、罐头食品放在各自的袋子中。然后,您可以根据它们的类型非常轻松地访问每组项目。
我没有实现我自己的,我想知道是否有人知道我可以使用的 Objective-C 中的直方图或包数据结构实现。
本质上,直方图是列表的哈希图,其中列表包含与其哈希条目相关的值。一个很好的例子是超市物品的直方图,您可以将每组奶制品、肉类、罐头食品放在各自的袋子中。然后,您可以根据它们的类型非常轻松地访问每组项目。
NSCountedSet是一个多重集(又名“bag”),它计算不同的对象,但不允许重复。但是,根据您的解释,我认为这不是您需要的,histogram也不是,它会根据一组(通常是数字)范围自动存储值。
我相信您真正想要的是multimap,它是“一个或多个值的关键”关系。我维护的数据结构框架包括CHMultiDictionary,一个多映射实现。我不会以任何方式声称它是完美的或完整的,但我希望它可能对您的问题有所帮助。
在我看来,您只是想要一个数组字典。您可以将 NSArrays 作为 NSDictionarys 的元素,例如:
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict setObject:[NSMutableArray arrayWithObjects:@"milk", @"eggs", @"cheese", nil] forKey:@"dairy"];
[dict setObject:[NSMutableArray arrayWithObjects:@"steak", @"sausages", @"mince", nil] forKey:@"meat"];
[[dict objectForKey:@"meat"] addObject:@"lamb"];
NSLog( @"Dictionary is %@", dict );
在GNU Objective-C 类库中有一个,但是文档似乎很不完整,并且项目的主页当前一定有问题——不过,如果 GPL 软件对您的项目是可以接受的,您可能需要下载并检查来源。
CFIOMultimap显然是多图的实现。但是,截至撰写本文时,我无法使其正常工作。当我下标时,它一直返回 nils。
也许它可以修复并适应您的使用。