Objective-C реализация гистограммы или структуры данных пакета
-
13-09-2019 - |
Вопрос
Вместо того чтобы реализовывать свой собственный, мне было интересно, знает ли кто-нибудь о реализации гистограммы или структуры данных bag в Objective-C, которую я мог бы использовать.
По сути, гистограмма - это хэш-карта списков, где списки содержат значения, относящиеся к их хэш-записи.Хорошим примером является гистограмма товаров супермаркета, где вы помещаете каждую группу товаров - молочные продукты, мясо, консервы - в отдельный пакет.Затем вы можете очень легко получить доступ к каждой группе элементов в соответствии с их типом.
Решение
NSCountedSet - набор данных является мультимножество (он же "bag"), который подсчитывает отдельные объекты, но не допускает дубликатов.Однако, основываясь на вашем объяснении, я не думаю, что это то, что вам нужно, и ни то, ни другое гистограмма, который автоматически выводит значения на основе набора (обычно числовых) диапазонов.
Я верю, что то, чего ты действительно хочешь, - это мультикарточка, который является отношением "ключ к одному или нескольким значениям".Тот Самый структура структур данных Я утверждаю, что включает в себя Мультипликатор, реализация с несколькими картами.Я ни в коем случае не буду утверждать, что это идеально или завершенно, но я надеюсь, что это может быть полезно для вашей проблемы.
Другие советы
Мне кажется, вам просто нужен словарь массивов.Вы можете поместить 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 очевидно, это реализация мультикарты.Однако на момент написания статьи мне не удалось заставить его работать.Он всегда возвращает нули, когда я подписываюсь.
Возможно, его можно исправить и адаптировать для вашего использования.