1

我正在尝试将字典设置为具有带有数值的字符串键(需要递增。

这就是我使用值 1 进行初始化的方式。

[person.list setObject:[NSNumber numberWithInteger:1] forKey:name];

我将如何根据需要增加值?

4

6 回答 6

8

从字典中获取键的对象,进行修改,然后将该对象添加到字典中以获得相同的键,这将替换以前的对象。

NSInteger number = [[dict objectForKey:name] integerValue];
number+=1;

[dict setObject:[NSNumber numberWithInteger:number] forKey:name];
于 2013-04-30T04:53:04.113 回答
1

使用甜蜜的类别,

@interface NSNumber (NSNumber_Incrementing)    
-(NSNumber *)increment;    
@end

@implementation NSNumber (NSNumber_Incrementing)    
-(NSNumber *)increment {
     return [NSNumber numberWithInt:[self intValue] + 1];
}


[person.list setObject:[mynumb increment] forKey:name];

这意味着你需要按住 mynumb

为 NSDecimal 等添加协议。

@protocol Incrementing
- (NSNumber *)increment;
@end
so the above might be
@interface NSNumber (NSNumber_Incrementing) <Incrementing>
...
@interface NSDecimableNumber (NSNumber_Incrementing) <Incrementing>

但即使 f*ng sweeter 也是 Dictionary 上的一个类别:

@interface NSDictionary (NSDictionary_SweetIncrementing) 
    -(void) incrementNumberForKey:name;  
@end

@implementation NSDictionary (NSDictionary_SweetIncrementing) 
-(void) incrementNumberForKey:name throws NSNumberException {
         NSNumber numb = (NSNumber *)[self valueForKey: name];         
         return [self setValue: [numb increment] forKey: name];
}
@end

valueForKey 和 setValue 属于 NSDictionary。您正在使用提供 objectForKey 和 setObject.... 的 NSMutableDictionary。如果需要,请改为这样做。

是的。并为与数字无关的键添加一些例外

一个类似的问题

于 2013-04-30T05:20:14.220 回答
0

如果它的顺序增量比 astatic integer会有所帮助!

static int increment = 1;

[person.list setObject:[NSNumber numberWithInteger:increment++] forKey:name];

如果您不知道static变量,这个问题可能会有所帮助。

于 2013-04-30T04:45:22.500 回答
0

不太确定您要达到的目标,但一种解决方案可能是

[person.list setObject:[NSNumber numberWithInteger:person.list.count+1] forKey:name];
于 2013-04-30T04:46:10.330 回答
0
    NSNumber *num = [person.list objectForKey:name];
    if(!num) [person.list setObject:[NSNumber numberWithInteger:1] forKey:name];
    else [person.list setObject:[NSNumber numberWithInteger:([num intValue]+1)] forKey:name];
于 2013-04-30T04:56:25.337 回答
0

首先,确保person.listNSMutableDictionary. (也可能希望将 person 的 list 属性更改为不同的名称。List 意味着类似数组的结构而不是 Dictionary。)

您可以使用新的 NSDictionary 语法和对象装箱的原语。我假设这里的数字是一个无符号整数。

person.list[name] = @([person.list[name] unsignedIntegerValue] + 1);

这在语法上类似于(为了便于阅读,分成多行)

NSUInteger previous = [[person.list objectForKey:name] unsignedIntegerValue];
NSNumber *incremented = [NSNumber numberWithUnsignedInteger:previous + 1];
[person.list setObject:incremented forKey:name];

@(...)语法将原始数字转换为 NSNumber 对象。虽然语法是of[name]的简写。setObject:forKey:NSMutableDictionary

于 2013-04-30T05:03:42.527 回答