我正在iOS上的Objective-C中搜索排序的数组或地图(Dict ......等等)。
是否存在类似的东西(插入时排序)或是否必须覆盖getter / setter并对我自己的数据结构进行排序?我知道,有可能对数组进行排序,但我想知道是否有像Java中的TreeMap这样的“自动”方式,你可以在其中放入一个Entry并将其直接插入到正确的位置。 / p>
干杯,
马克
答案 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];
}