Выполнение Objective-C гистограммы или пакетной структуры данных - PullRequest
3 голосов
/ 15 июня 2009

Вместо того, чтобы реализовывать свою собственную, я задавался вопросом, знает ли кто-нибудь о реализации гистограммы или пакетной структуры данных в Objective-C, которую я могу использовать.

По сути, гистограмма - это хэш-карта списков, где списки содержат значения, которые относятся к их записи в хеш-файле. Хорошим примером является гистограмма товаров из супермаркета, где вы помещаете каждую группу товаров: молочные, мясные, консервированные в отдельную сумку. После этого вы можете очень легко получить доступ к каждой группе предметов в соответствии с их типом.

Ответы [ 4 ]

5 голосов
/ 15 июня 2009

NSCountingSet - это мультимножество (он же «сумка»), которое считает отдельные объекты, но не допускает дублирования. Однако, основываясь на вашем объяснении, я не думаю, что это то, что вам нужно, и не является гистограммой , которая автоматически формирует значения на основе набора (обычно числовых) диапазонов.

Я считаю, что вы действительно хотите мультикарту , которая является отношением "ключ к одному или нескольким значениям". структура структур данных , которую я поддерживаю, включает в себя CHMultiDictionary , реализацию нескольких карт. Я ни в коем случае не буду утверждать, что он идеален или завершен, но я надеюсь, что это может помочь вашей проблеме.

3 голосов
/ 16 июня 2009

Для меня это звучит так, будто вы просто хотите словарь массивов. Вы можете поместить 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 );
1 голос
/ 15 июня 2009

В библиотеке классов GNU Objective-C есть одна, но документы выглядят довольно неполными, и на домашней странице проекта в настоящее время должна быть проблема - тем не менее, если программное обеспечение GPL приемлемо для вашего проекта, вы можете загрузить и проверить источники.

0 голосов
/ 11 сентября 2014

CFIOMultimap , очевидно, является реализацией мультикарты. Однако на момент написания статьи я не мог заставить его работать. Он возвращает ноль все время, когда я подписываюсь.

Возможно, это можно исправить и адаптировать для вашего использования.

...