I\'ve been having some trouble with sorting multi-dimensional arrays in Objective-C. I basically have an array of which every element is an array of the form:
(
You can also use blocks-based method sortUsingComparator: in NSMutableArray
like this –
[myArray sortUsingComparator:^(id first, id second){
id firstObject = [first objectAtIndex:1];
id secondObject = [second objectAtIndex:1];
return [firstObject compare:secondObject];
}]
You also have a parallel method sortedArrayUsingComparator: in NSArray
which will spew out a sorted array.
Sorting by varying indices
typedef NSComparator (^ComparatorFactory)(id);
ComparatorFactory comparatorForIndex = ^NSComparator(id context) {
NSInteger index = [(NSNumber*)context integerValue];
NSComparator comparator = ^(id first, id second) {
id firstObject = [first objectAtIndex:index];
id secondObject = [second objectAtIndex:index];
return [firstObject compare:secondObject];
};
return [[comparator copy] autorelease];
};
[myArray sortUsingComparator:comparatorForIndex([NSNumber numberWithInteger:1])];
Depending on the index passed, the array will sort based on objects at that index. This is pretty basic code but you can add to this.
in most cases, you would create an object:
@interface MONObject : NSObject
{
NSString * a;
NSDate * b;
NSString * c;
NSString * d;
}
...
then teach it to compare itself to others, then use those objects in the array. logical organization of data and implementation.