Иногда нужно быстро отсортировать обычный массив. Очень красиво это решается с использованием блоков, которые появились вместе с iOS 4.0. Также, если мы хотим использовать блоки для разработки приложений, которые бы поддерживали iOS < 4.0, то такая возможность так же имеется. Для этого можно воспользоваться библиотекой, которая лежит здесь: https://github.com/EmbeddedSources/BlockRuntime


NSComparisonResult (^sortBlock)(id, id) = ^(id obj1, id obj2) {
// здесь может находиться любое условие, позволяющее сравнить два объекта
// например, можно было бы написать:
// if ([obj1 integerValue] > [obj2 integerValue]), что тоже будет работать с данным массивом
if ([obj1 length] > [obj2 length]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 length] < [obj2 length]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
};
NSMutableArray *numbers = [[NSMutableArray alloc] initWithObjects:@"1a", @"10bsdfs", @"20adfb", @"2ac" , nil];
NSArray *sortedNumbers = [numbers sortedArrayUsingComparator:sortBlock];
// теперь в sortedNumbers объекты находятся в порядке, заданным нами, т.е. в данном случае
// по убыванию длины объекта-строки
[numbers release];