Использование sortUsingSelector на NSMutableArray - PullRequest
2 голосов
/ 01 октября 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 01 октября 2010

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

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

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

0 голосов
/ 01 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...