Сортировать массив или карту в Objective C? - PullRequest
2 голосов
/ 03 апреля 2012

Я ищу отсортированный массив или карту (Dict ... что угодно) в Objective-C на iOS.

Есть ли что-то сопоставимое (сортировка при вставке) или мне нужно переопределить метод получения / установки и отсортировать структуры данных «самостоятельно»? Я знаю, что есть возможность сортировать массивы, но мне интересно, есть ли такой «автоматический» способ, как TreeMap в Java, где вы можете поместить Entry, и он будет вставлен прямо в нужное место.

Приветствия

Марк

1 Ответ

0 голосов
/ 03 апреля 2012

Вероятно, самое простое, что нужно сделать, если вы хотите создать массив, это создать категорию в NSMutableArray с помощью метода, который вставляет объект в нужное место.Однако это немного неудовлетворительно (ничто не мешает вам вставлять объекты с помощью обычного метода и нарушать порядок), поэтому вам, вероятно, нужен собственный класс коллекции.Вы можете легко создать это, обернув NSMutableArray и компаратор в новый класс.например,

@interface MyOrderedArray : NSObject <NSFastEnumeration>

-(id) initWithComparator: (NSComparator) anOrdering;

-(void) insertObject: (id) aNewObject;

// methods to access objects from the array

@end

@implementation MyOrderedArray
{
   NSComaparator theOrdering;
   NSMutableArray* backingArray;
}

-(id) initWithComparator: (NSComparator) anOrdering
{
    self = [super init];
    if (self != nil)
    {
        theOrdering = [anOrdering copy];
        backingArray = [[NSMUtableArray alloc] init];
}

-(id) insertObject: (id) newObject
{
    // use a binary search to find the index and insert the object there
}

В резервный массив могут быть переданы другие методы, например,

-(NSUInteger) count
{
    return [backingArray count];
}

, и этот будет полезен:

- (NSUInteger)countByEnumeratingWithState: (NSFastEnumerationState*) state 
                                  objects: (id*) stackbuf 
                                    count: (NSUInteger) len
{
    return [backingArray countByEnumeratingWithState: state 
                                             objects: stackbuf 
                                               count: len];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...