Objective C中的排序数组或映射?

时间:2012-04-03 13:34:02

标签: objective-c ios arrays map

我正在iOS上的Objective-C中搜索排序的数组或地图(Dict ......等等)。

是否存在类似的东西(插入时排序)或是否必须覆盖getter / setter并对我自己的数据结构进行排序?我知道,有可能对数组进行排序,但我想知道是否有像Java中的TreeMap这样的“自动”方式,你可以在其中放入一个Entry并将其直接插入到正确的位置。 / p>

干杯,

马克

1 个答案:

答案 0 :(得分:0)

可能最容易做的事情,如果你想要一个数组,就是在NSMutableArray上用一个在正确位置插入一个对象的方法创建一个类别。但是这有点令人不满意(没有什么可以阻止你使用普通方法插入对象并破坏顺序),所以你可能想要自己的集合类。您可以通过在新类中包装NSMutableArray和comparator来轻松创建它。 e.g。

@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];
}