Использование 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:
но это довольно неудобно, и большинство людей (включая меня) утверждают, что писать категорию для этого - плохой стиль.