Nunit плохо работает со смешанными проектами в C ++, поэтому мне пришлось отказаться от него
.попробуйте использовать
[[mySet allObjects] sortedArrayUsingDescriptors:descriptors];
Изменить : для iOS ≥ 4.0 и Mac OS X ≥ 10.6 вы можете напрямую использовать
[mySet sortedArrayUsingDescriptors:descriptors];
«Самый эффективный способ» сортировки набора объектов зависит от того, что вы на самом деле имеете в виду. Случайное предположение (сделанное в предыдущих ответах) - это одноразовый вид объектов в наборе. В данном случае я бы сказал, что это в значительной степени перемешивание между тем, что предлагает @cobbal , и тем, что вы придумали - вероятно, что-то вроде следующего:
NSMutableArray* array = [NSMutableArray arrayWithCapacity:[set count]];
for (id anObject in set)
[array addObject:anObject];
[array sortUsingDescriptors:descriptors];
(Я говорю, что это подбрасывание поскольку подход @cobbal создает два автоматически выпускаемых массива, поэтому объем памяти удваивается. Это несущественно для небольших наборов объектов, но технически ни один из подходов не очень эффективен.)
Однако , если вы сортируете элементы в устанавливать более одного раза (и особенно, если это обычное дело), это определенно неэффективный подход. Вы можете сохранить NSMutableArray и синхронизировать его с NSSet, а затем каждый раз вызывать -sortUsingDescriptors:, но даже если массив уже отсортирован, он все равно потребует N сравнений.
Какао само по себе просто не обеспечивает эффективного подход к хранению коллекции в отсортированном порядке. В Java есть класс TreeSet , который поддерживает элементы в отсортированном порядке всякий раз, когда объект вставляется или удаляется, но Какао этого не делает. Именно эта проблема побудила меня разработать нечто подобное для себя.
В рамках унаследованной и модернизированной мной структуры структур данных я создал протокол и несколько реализаций для сортированных наборов . Любой из конкретных подклассов будет поддерживать набор отдельных объектов в отсортированном порядке. Еще предстоит внести некоторые уточнения - прежде всего, он сортирует на основе результата -compare: (который должен реализовывать каждый объект в наборе) и еще не принимает NSSortDescriptor. (Обходной путь заключается в реализации -compare: для сравнения интересующего свойства объектов.)
Одним из возможных недостатков является то, что эти классы (в настоящее время) не являются подклассами NS (Mutable) Set, поэтому, если вы должны передать NSSet , заказываться не будет. (В протоколе есть метод -set, который возвращает NSSet, который, конечно, неупорядочен.) Я планирую исправить это в ближайшее время, как я сделал с подклассами NSMutableDictionary в структуре. Отзывы, безусловно, приветствуются. : -)
(Обходной путь заключается в реализации -compare: для сравнения интересующего свойства объектов.)Одним из возможных недостатков является то, что эти классы (в настоящее время) не являются подклассами NS (Mutable) Set, поэтому, если вы должны передать NSSet , заказываться не будет. (В протоколе есть метод -set, который возвращает NSSet, который, конечно, неупорядочен.) Я планирую исправить это в ближайшее время, как я сделал с подклассами NSMutableDictionary в структуре. Отзывы, безусловно, приветствуются. : -)
(Обходной путь заключается в реализации -compare: для сравнения интересующего свойства объектов.)Одним из возможных недостатков является то, что эти классы (в настоящее время) не являются подклассами NS (Mutable) Set, поэтому, если вы должны передать NSSet , заказываться не будет. (В протоколе есть метод -set, который возвращает NSSet, который, конечно, неупорядочен.) Я планирую исправить это в ближайшее время, как я сделал с подклассами NSMutableDictionary в структуре. Отзывы, безусловно, приветствуются. : -)
мы сделали с подклассами NSMutableDictionary в структуре. Отзывы, безусловно, приветствуются. : -) мы сделали с подклассами NSMutableDictionary в структуре. Отзывы, безусловно, приветствуются. : -)NSSet - это набор неупорядоченных объектов. Рассмотрение ссылок на яблоки Массивы - это упорядоченные коллекции.
При рассмотрении NSArray есть обсуждение с примерами сортировки на http://developer.apple.com/documentation/Cocoa/Conceptual/Collections/Articles/sortingFilteringArrays ...
Пример из ссылки:
NSInteger alphabeticSort(id string1, id string2, void *reverse)
{
if (*(BOOL *)reverse == YES) {
return [string2 localizedCaseInsensitiveCompare:string1];
}
return [string1 localizedCaseInsensitiveCompare:string2];
}
// assuming anArray is array of unsorted strings
NSArray *sortedArray;
// sort using a selector
sortedArray =
[anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
// sort using a function
BOOL reverseSort = NO;
sortedArray =
[anArray sortedArrayUsingFunction:alphabeticSort context:&reverseSort];