I have a NSDictionary collection whose key is a unique id and value is an array with two different objects (FruitClass, ProductClass) and I would like to group the collection such that it’s sorted first by ProductClass.productName and then by FruitClass.itemName.
So the final list would look something like:
{apple, butter}
{apple, pie}
{banana, daiquiri}
{banana, smoothie}
{melon, zinger}
where the first item is a FruitClass instance item and second is a ProductClass instance item.
What’s the best way to go about doing this? Most of the examples I’ve come across are done on one key. How do you do it with an NSDictionary that has 2 different object types?
Looking at NSDictionary’s’s keysSortedByValueUsingSelector,
- (NSArray *)keysSortedByValueUsingSelector:(SEL)comparator
I get the impression that you would create the ‘compare’ method on the class type of the value object. So for multiple field sort, would I have to resort to creating a new object type, ‘CombinedClass’ which contains FruitClass & ProductClass and implement a ‘compare’ to make this happen?
FruitClass:
{
NSString *itemName;
}
@end
@interface ProductClass
{
NSString *productName;
}
@end
You could add a category to NSArray that would do the comparison and you wouldn’t have to create another class.
The implementation should be pretty straightforward based on your description.
Edit I got a little miffed that this was marked down with no comment, so I did a full implementation to make sure it would work. This is a little different than your sample, but the same idea.
FruitsAndProducts.h
FruitsAndProducts.m
NSArray+MyCustomSort.h
NSArray+MyCustomSort.m
Here it is in action