Выполнение Objective-C гистограммы или пакетной структуры данных
Вместо того, чтобы реализовывать свою собственную, мне было интересно, знает ли кто-нибудь о реализации гистограммы или пакетной структуры данных в Objective-C, которую я могу использовать.
По сути, гистограмма - это хэш-карта списков, где списки содержат значения, которые относятся к их записи в хеш-файле. Хорошим примером является гистограмма товаров из супермаркета, где вы помещаете каждую группу товаров: молочные, мясные, консервированные в отдельную сумку. Затем вы можете очень легко получить доступ к каждой группе предметов в соответствии с их типом.
4 ответа
NSCountingSet - это мультимножество (он же "сумка"), которое считает отдельные объекты, но не допускает дублирования. Однако, исходя из вашего объяснения, я не думаю, что это то, что вам нужно, равно как и гистограмма, которая автоматически формирует значения на основе набора (обычно числовых) диапазонов.
Я полагаю, что вы действительно хотите мультикарту, которая является отношением "ключ к одному или нескольким значениям". Каркас структур данных, который я поддерживаю, включает в себя 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, очевидно, является реализацией мультикарты. Однако на момент написания статьи я не мог заставить его работать. Он возвращает ноль все время, когда я подписываюсь.
Возможно, это можно исправить и адаптировать для вашего использования.