I'm new to objective-c and I'm looking for a good data structure to allow for the categorization of items. Let's say I wanted to categorize types of food. The categories are meat, fruit, and vegetables. When a user inputs "apple" then I want to know that the apple belongs to the fruit category. In addition, these categories need to be mutable. So, if a user inputs an unknown food then they can assign it to a category and the category will be updated to remember this new type of food.
I have looked at using an NSMutableArray. My thinking goes that I would have an array for each category of food, and the elements of the array would be all the foods that fall in that category. I would then just search each array until I found a match.
The categories won't be too massive (< ~5,000 items in each), but large enough that I would like to have them sorted and take other considerations to allow for quick searching.
What are some good data structures to solve this problem?
Objective-C provides 3 data structures which can be useful for your purpose,
NSDictionary. These come also in the mutable flavour and
NSSet offers also the
NSOrderedSet subclass which can manage ordering.
What you should use depends on which kind of operations you are going to do mostly with your data:
NSMutableSetmember for each food instance if you plan to assign multiple categories per element.
NSMutableSetinstances, one per category and add the food to the specific
NSMutableDictionarywhich maps each food to its category
But still it depends if you need fast lookup in one direction or in the other. Just think about that
NSDictionary provide fast lookup (so it's efficient to check if an element is contained in a
NSSet or getting the value mapped to a specific key of a