NSSet: return an NSArray of objects sorted by a list of strings on certain property of each object?

StackOverflow https://stackoverflow.com/questions/14149934

Frage

I have an NSSet of objects.

Each object in the set is an instance of MyObject with a property called name.

I have another NSArray called nameIndexes which contains name values.

I would like to have a function that takes the NSSet and returns a sorted array sorted using the name property based on its position in the nameIndexes array.

Edit:

Sorry for my misleading, here is an example:

I have a set of MyObject(may not be in the same order):

MyObject1 {name:@"A"}

MyObject2 {name:@"B"}

MyObject3 {name:@"C"}

I have another array of names:

{"B", "A", "C"}

I want an NSArray of:

{MyObject2, MyObject1, MyObject3}
War es hilfreich?

Lösung

NSSet *set = //your set.

NSArray *nameIndexes = //the array of names for sorting.

NSArray *result = [[set allObjects] sortedArrayUsingComparator:^NSComparisonResult(MyObject *obj1, MyObject *obj2) {
    int index1 = [nameIndexes indexOfObject:obj1.name];
    int index2 = [nameIndexes indexOfObject:obj2.name];
    return [[NSNumber numberWithInt:index1] compare:[NSNumber numberWithInt:index2]];
}];

Not 100% certain what you are asking but this will sort take the set of names and turn it into a sorted array sorted based on the index of the names in a second array.

After edit

Edit... ok, so your edit completely changed the question. Anyway, from the edit you can just do...

NSArray *result = [[set allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:"name" ascending:YES]]];

This will take the set and return a sorted array sorted by the name property of the objects in alphabetical order.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top