OrderedDictionary


@interface OrderedDictionary : NSMutableDictionary

{

    NSMutableDictionary *dictionary;

    NSMutableArray *array, *values;

}


- (void)insertObject:(id)anObject forKey:(id)aKey atIndex:(NSUInteger)anIndex;

- (id)keyAtIndex:(NSUInteger)anIndex;

- (NSEnumerator *)reverseKeyEnumerator;

@end


@interface OrderedDictionary (Extensions)


- (id) objectAtKeyIndex:(NSUInteger)anIndex;

- (NSArray *) allKeys;

- (NSArray *) allValues;


@end


----------------------------------------------------------------------------------------


NSString *DescriptionForObject(NSObject *object, id locale, NSUInteger indent)

{

    NSString *objectString;

    if ([object isKindOfClass:[NSString class]])

    {

        //                objectString = (NSString *)[[object retain] autorelease];

        objectString = (NSString *)object;

    }

    else if ([object respondsToSelector:@selector(descriptionWithLocale:indent:)])

    {

        objectString = [(NSDictionary *)object descriptionWithLocale:locale indent:indent];

    }

    else if ([object respondsToSelector:@selector(descriptionWithLocale:)])

    {

        objectString = [(NSSet *)object descriptionWithLocale:locale];

    }

    else

    {

        objectString = [object description];

    }

    return objectString;

}


@implementation OrderedDictionary


- (id)init

{

    return [self initWithCapacity:0];

}


- (id)initWithCapacity:(NSUInteger)capacity

{

    self = [super init];

    if (self != nil)

    {

        dictionary = [[NSMutableDictionary alloc] initWithCapacity:capacity];

        array = [[NSMutableArray alloc] initWithCapacity:capacity];

        values = [[NSMutableArray alloc] initWithCapacity:capacity];

    }

    return self;

}


- (void)dealloc

{

    

}


- (id)copy

{

    return [self mutableCopy];

}


- (void)setObject:(id)anObject forKey:(id)aKey

{

    if (![dictionary objectForKey:aKey])

    {

        [array addObject:aKey];

        [values addObject:anObject];

    }

    [dictionary setObject:anObject forKey:aKey];

}


- (void)removeObjectForKey:(id)aKey

{

    id anObject = [dictionary objectForKey:aKey];

    [array removeObject:aKey];

    [values removeObject:anObject];

    [dictionary removeObjectForKey:aKey];

}


- (NSUInteger)count

{

    return [dictionary count];

}


- (id)objectForKey:(id)aKey

{

    return [dictionary objectForKey:aKey];

}


- (NSEnumerator *)keyEnumerator

{

    return [array objectEnumerator];

}


- (NSEnumerator *)reverseKeyEnumerator

{

    return [array reverseObjectEnumerator];

}


- (void)insertObject:(id)anObject forKey:(id)aKey atIndex:(NSUInteger)anIndex

{

    if ([dictionary objectForKey:aKey])

    {

        [self removeObjectForKey:aKey];

    }

    [array insertObject:aKey atIndex:anIndex];

    [values insertObject:anObject atIndex:anIndex];

    [dictionary setObject:anObject forKey:aKey];

}


- (id)keyAtIndex:(NSUInteger)anIndex

{

    return [array objectAtIndex:anIndex];

}


- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level

{

    NSMutableString *indentString = [NSMutableString string];

    NSUInteger i, count = level;

    for (i = 0; i < count; i++)

    {

        [indentString appendFormat:@"    "];

    }

    

    NSMutableString *description = [NSMutableString string];

    [description appendFormat:@"%@{\n", indentString];

    for (NSObject *key in self)

    {

        [description appendFormat:@"%@    %@ = %@;\n",

         indentString,

         DescriptionForObject(key, locale, level),

         DescriptionForObject([self objectForKey:key], locale, level)];

    }

    [description appendFormat:@"%@}\n", indentString];

    return description;

}


-(id) initWithDictionary:(NSDictionary *)otherDictionary copyItems:(BOOL)flag {

    

    if (self = [super initWithDictionary:otherDictionary copyItems:flag]) {

        

    }

    

    return self;

}


@end


@implementation OrderedDictionary (Extensions)


- (id) objectAtKeyIndex:(NSUInteger)anIndex {

    

    return [self objectForKey:[self keyAtIndex:anIndex]];

    

}


-(NSArray *) allKeys {

    return array;

}


-(NSArray *) allValues {

    

    return values;

}

@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值