NSSet:返回一个NSArray对象,按每个对象的某些属性上的字符串列表排序?

时间:2013-01-04 01:39:33

标签: objective-c ios nsarray nsset

我有NSSet个对象。

集合中的每个对象都是MyObject的一个实例,其中包含一个名为name的属性。

我有另一个NSArray名为nameIndexes,其中包含名称值。

我希望有一个函数接受NSSet并返回一个排序数组,该数组使用name属性根据其在nameIndexes数组中的位置进行排序。

修改

对不起我的误导,这是一个例子:

我有一组MyObject(可能不是同一个顺序):

MyObject1 {name:@"A"}

MyObject2 {name:@"B"}

MyObject3 {name:@"C"}

我有另一组名字:

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

我想要一个NSArray:

{MyObject2, MyObject1, MyObject3}

1 个答案:

答案 0 :(得分:6)

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]];
}];

不是100%肯定你在问什么,但是这会排序取名字并将其变成一个排序数组,根据第二个数组中名字的索引排序。

修改后

编辑...确定,所以您的编辑完全改变了问题。无论如何,你可以从编辑中做到......

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

这将获取set并返回按字母顺序排列的对象的name属性排序的排序数组。