Использование sortUsingSelector на NSMutableArray

Я использовал sortUsingSelector для сортировки NSMutableArray пользовательских объектов.

Теперь я пытаюсь отсортировать NSMutableArray, содержащий NSMutableArrays пользовательских объектов.

Можно ли использовать sortUsingSelector для NSMutableArray или он работает только для пользовательских классов?

3 ответа

Если вы можете использовать блоки, самый простой способ использования 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];

Он отправляет селектор на объекты, поэтому вам нужно использовать один из других сортировщиков. Вероятно, sortUsingFunction:context:.

Конечно, вы также можете использовать sortUsingSelector:действительно не имеет значения, что является объектом в вашем массиве, если он отвечает на селектор, который вы хотите использовать. Но NSMutableArray а также NSArray самих методов сравнения нет, поэтому вам придется расширять их, используя категорию для реализации метода сравнения.

Таким образом, вы, вероятно, хотите использовать другие методы сортировки, указанные в других ответах здесь. Это не невозможно использовать sortUsingSelector: но это довольно неудобно, и большинство людей (включая меня) утверждают, что писать категорию для этого - плохой стиль.

Другие вопросы по тегам