在NSMutableArray上使用sortUsingSelector

时间:2010-10-01 02:09:16

标签: objective-c cocoa-touch class sorting nsmutablearray

我使用了sortUsingSelector来对自定义对象的NSMutableArray进行排序。

现在我正在尝试对包含自定义对象的NSMutableArrays的NSMutableArray进行排序。

你可以在NSMutableArray上使用sortUsingSelector,还是仅适用于自定义类?

3 个答案:

答案 0 :(得分:1)

如果你可以使用块,那么使用sortUsingComparator:是最简单的方法。否则,您需要使用sortUsingFunction:

在任何一种情况下,您都需要编写一个自定义块或函数,它将两个数组作为参数,并根据其内容返回一个排序顺序(我不确定您使用什么逻辑来确定数组A或者数组B是“之前”或“之后”另一个)。

你会做类似的事情:

static NSInteger MySorterFunc(id leftArray, id rightArray, void *context) {
    ... return ascending/descending/same based on leftArray vs. rightArray ...
}

然后:

[myArrayOfArrays sortUsingFunction: MySorterFunc context: NULL];

答案 1 :(得分:0)

它将选择器发送到对象,因此您需要使用其他排序器之一。可能是sortUsingFunction:context:。

答案 2 :(得分:0)

当然你也可以使用sortUsingSelector:,只要它响应你想要使用的选择器,数组中的对象是什么并不重要。但NSMutableArrayNSArray本身没有任何比较方法,因此您必须使用类别扩展它们以实现比较方法。

所以你可能想要使用其他答案中指出的其他排序方法。使用sortUsingSelector:并非不可能,但它相当不方便,大多数人(包括我)会认为为此编写类别是不好的风格。