Showing posts with label sort. Show all posts
Showing posts with label sort. Show all posts

Sort Array with comparator

For a mutable array of dictionaries:

NSMutableArray *aMutableArray = [NSMutableArray arrayWithObjects:
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"A", @"name",
          [NSNumber numberWithInt:6], @"value", nil],
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"C", @"name",
          [NSNumber numberWithInt:2], @"value", nil],
         [NSDictionary dictionaryWithObjectsAndKeys:
          @"B", @"name",
          [NSNumber numberWithInt:4], @"value", nil], nil];
In this case case here's how you sort it by value:


NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES];
[aMutableArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];



Otherwise:


NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastname" ascending:YES comparator:^(id left, id right) {
float v1 = [left floatValue];
float v2 = [right floatValue];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}];

[data sortUsingDescriptors:[NSArray arrayWithObject:lastNameDescriptor]];

sort an array of strings alphabetically when the strings contains åäö

NSArray *strings=[NSArray arrayWithObjects:@"as", @"ol", @"st", @"br", @"ög", @"år", @"ös", nil];
NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"];

NSArray *sorted=[strings sortedArrayUsingComparator:^(NSString *first, NSString *second) {
return [first compare:second
options:0
range:NSMakeRange(0, [first length])
locale:locale];
}];

for (NSString *s in sorted) { NSLog(@"%@", s); }

output:
as br ol st år ög ös

Sort Array by Number

NSArray *order = [order sortedArrayUsingComparator: ^(id first, id second) {
return [(NSString *)first compare:(NSString *)second options: NSNumericSearch];
}];

Sort Array

NSArray *myArray = [myArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

or

NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
[myArray sortUsingDescriptors:[NSArray arrayWithObject:lastNameDescriptor]];