2013-12-16 4 views
1

, так что если у меня есть NSMutableArray, и я заполнил его объектами, которые я определил, как его сортировать? Каждый объект имеет свойство «имя» наряду с некоторыми другими ...Как отсортировать NSMutableArray, заполненный моими собственными объектами

myobject.h

@interface MyObject : NSObject 

@property (strong, nonatomic) NSString *name; 

@end 

Теперь, что мне делать, чтобы отсортировать NSMutableArray каждым экземпляром свойства «имя» MyObject в?

ответ

1

В контроллере представления (или другого класса) сделайте следующее ...

ViewController.h (вы должны уже иметь это)

@interface ViewController : UIViewController 

@property (strong, nonatomic) NSMutableArray *array; 

@end 

ViewController.m (добавьте эту строку, где вы хотите сортировать «имя»)

[array sortUsingDescriptors: [NSArray arrayWithObjects: [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES], nil]]; 

Это сортирует массив по каждому экземпляру собственности MyObject в «имя». Измените «имя» на другое свойство для того же эффекта на другом ключе сортировки.

+0

Это заглавные буквы сначала, а маленькие буквы - вторые. – DevC

1

Если вы хотите, чтобы отсортировать на основе имени, в алфавитном порядке, то это было бы самым простым способом:

Создать метод MyObject, который вы будете использовать для сортировки объектов. compare: - это общее название метода для такого рода ситуаций. Он должен принять аргумент того же типа, что и класс, и вернуть NSComparisonResult. Например:

-(NSComparisonResult)compare:(MyObject*)obj; 

Поскольку мы хотим, чтобы сравнить эти объекты, основанные на собственности таким же образом, что объекты типа этого свойства уже в сравнении, мы можем просто вернуть результат этого сравнения:

-(NSComparisonResult)compare:(MyObject*)obj { 
    return [self.name compare:obj.name]; 
} 

Теперь, когда этот метод находится в месте, это так просто, как вызов sortUsingSelector: на массиве, в котором они содержащиеся:

[array sortUsingSelector:@selector(compare:)]; 

Преимущество такого подхода нелегко увидеть для такого простого метода compare:, но вы можете поместить любую логику в метод compare:.

Например, если вы имели Person класс, который содержал дату рождения, имя и фамилию, вы могли бы сделать свой метод compare: рода сначала DOB, и если таковые были эквивалентны, сортировать по фамилии, и если вы все равно получили эквивалентный результат, затем сортируйте по имени и т. д. Это не так просто сделать, используя методы NSSortDescriptor (насколько я знаю).

Смежные вопросы