Seerex
Seerex

Reputation: 601

Sort array with custom objects

I'm trying to sort an array, filled with objects from a class i wrote. The class i wrote contains an NSString itself, as the "name". So what i wanna do, is to sort the array, based on the name property the objects contain. I tried the simple:

[anArray sortedArrayUsingSelecter: CaseInsensitiveCompare];

But as you can guess, it sends the caseInsensitiveCompare message to the objects itself, and it won't respond to that one.

So i'm guessing i have to make my objects able to respond to the caseInsensitiveCompare? Not quite sure how to write such a method, so any pointers would be lovely.

Thanks

Upvotes: 2

Views: 4282

Answers (2)

sch
sch

Reputation: 27516

You can use the method sortedArrayUsingComparator:

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(MyClass *a, MyClass *b) {
    return [a.name caseInsensitiveCompare:b.name];
}];

Upvotes: 10

goetz
goetz

Reputation: 916

You can sortedArrayUsingComparator:(NSComparator)cmptr (NSArray reference) to sort the array. For instance, if you want to sort by the name property, do the following (assuming your class is called Person):

NSArray *sortedArray = [anArray sortedArrayUsingComparator:^(id a, id b) {
    NSString *first = [(Person *)a name];
    NSString *second = [(Person *)b name];
    return [first caseInsensitiveCompare:second];
}];

Upvotes: 1

Related Questions